Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
js 如何使用fill填充数组的某部分内容_创想鸟

js 如何使用fill填充数组的某部分内容

fill 方法会直接修改原数组,若要避免修改原数组,应先使用 slice 方法创建副本再调用 fill;当填充对象时,由于填充的是引用,修改其中一个元素会影响所有元素,因此需注意使用独立对象;fill 可结合 array.from 生成特定数组,且能填充稀疏数组的空槽,但不支持老浏览器时需引入 polyfill。

js 如何使用fill填充数组的某部分内容

fill

方法,可以直接修改原数组,把数组的一部分或者全部替换成指定的值。这玩意儿用起来挺方便,但也有点小坑,一会儿细说。

解决方案

fill

的基本用法是

array.fill(value, start, end)

value

是你要填充的值,

start

是起始索引(包含),

end

是结束索引(不包含)。如果

start

end

都省略了,那就把整个数组都填满。

举个例子:

let arr = [1, 2, 3, 4, 5];arr.fill(0, 2, 4); // 从索引2开始,到索引4之前(不包括4)console.log(arr); // 输出: [1, 2, 0, 0, 5]let arr2 = [1, 2, 3, 4, 5];arr2.fill(9); // 全部填充console.log(arr2); // 输出: [9, 9, 9, 9, 9]

需要注意的是,

fill

是直接修改原数组,而不是返回一个新的数组。

如果

value

是一个对象,那可就有点意思了。

fill

填充的是对象的引用,而不是复制对象。这意味着,如果你修改了其中一个填充的对象,所有填充的对象都会被修改。

let obj = { a: 1 };let arr3 = new Array(3).fill(obj);console.log(arr3); // 输出: [{a: 1}, {a: 1}, {a: 1}]arr3[0].a = 2;console.log(arr3); // 输出: [{a: 2}, {a: 2}, {a: 2}]  注意这里都变了!

看到了吧,

arr3[0].a

修改了,整个数组里的对象都跟着变了。这是因为它们都指向同一个对象。

如何避免

fill

修改原数组?

其实很简单,用

slice

复制一份再

fill

就行了。

let arr4 = [1, 2, 3, 4, 5];let newArr = arr4.slice().fill(0, 2, 4);console.log(arr4); // 输出: [1, 2, 3, 4, 5] (原数组没变)console.log(newArr); // 输出: [1, 2, 0, 0, 5] (新数组被修改)

这样,

newArr

就是一个全新的数组,修改它不会影响到

arr4

fill

方法还可以用来初始化数组,特别是当数组的长度是动态确定的时候。

let len = 10;let arr5 = new Array(len).fill(null); // 初始化一个长度为10的数组,所有元素都是nullconsole.log(arr5); // 输出: [null, null, null, null, null, null, null, null, null, null]
fill

还有一个比较少见的用法,就是配合

Array.from

来生成一些特殊数组。

let arr6 = Array.from({length: 5}, (_, i) => i + 1); // 生成 [1, 2, 3, 4, 5]console.log(arr6);let arr7 = Array.from({length: 5}).fill(0); // 生成 [0, 0, 0, 0, 0], 注意这里先fill再from效果不一样console.log(arr7);
Array.from

允许你从一个类数组对象或者可迭代对象创建一个新的数组实例。

fill

的兼容性怎么样?

fill

是 ES6 引入的,所以老版本的浏览器可能不支持。如果需要兼容老版本浏览器,可以使用 polyfill。

if (!Array.prototype.fill) {  Array.prototype.fill = function(value) {    // Steps 1-2.    if (this == null) {      throw new TypeError('this is null or not defined');    }    var O = Object(this);    // Steps 3-5.    var len = O.length >>> 0;    // Steps 6-7.    var start = arguments[1];    var relativeStart = start >> 0;    // Step 8.    var k = relativeStart > 0;    // Step 11.    var final = relativeEnd < 0 ?      Math.max(len + relativeEnd, 0) :      Math.min(relativeEnd, len);    // Step 12.    while (k < final) {      O[k] = value;      k++;    }    // Step 13.    return O;  };}

这个 polyfill 可以在 MDN 上找到。

fill

配合

map

使用有什么要注意的?

fill

map

都是数组操作中常用的方法,但是它们的行为有所不同。

fill

直接修改原数组,而

map

返回一个新的数组。

let arr8 = [1, 2, 3];arr8.fill(0).map(x => x + 1); // 看起来像要把数组填充为0,然后每个元素加1console.log(arr8); // 输出: [0, 0, 0]

上面的代码并没有达到预期的效果,因为

fill

先把数组变成了

[0, 0, 0]

,然后

map

对这个数组进行操作,但是

map

的返回值并没有赋值给

arr8

如果想要达到预期的效果,可以先

map

fill

,或者使用

Array.from

let arr9 = [1, 2, 3].map(x => x + 1);console.log(arr9); // 输出: [2, 3, 4]let arr10 = Array.from([1, 2, 3], x => x + 1);console.log(arr10); // 输出: [2, 3, 4]

什么时候应该使用

fill

,什么时候应该使用循环?

一般来说,如果需要批量设置数组的某个范围内的值,

fill

是一个不错的选择,代码简洁易懂。如果需要根据索引或者其他条件来设置数组的值,循环可能更灵活。

fill

在处理稀疏数组时的行为是什么?

稀疏数组是指数组中包含空槽(hole)的数组。

fill

会将稀疏数组中的空槽填充为指定的值。

let arr11 = new Array(5); // 创建一个长度为5的稀疏数组console.log(arr11); // 输出: [  ]arr11.fill(0);console.log(arr11); // 输出: [ 0, 0, 0, 0, 0 ]
fill

会将稀疏数组中的所有空槽都填充为 0。

总结一下,

fill

是一个很方便的数组填充方法,但是需要注意它的行为,特别是当填充的值是对象的时候。要避免修改原数组,可以使用

slice

复制一份再

fill

。 在某些情况下,

fill

配合

Array.from

可以生成一些特殊的数组。

以上就是js 如何使用fill填充数组的某部分内容的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1517332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JS如何实现B树?B树的插入和删除
上一篇 2025年12月20日 10:42:03
JS如何实现WeakMap?弱引用的使用
下一篇 2025年12月20日 10:42:13

相关推荐

  • Java多线程API调用中Future.get()返回null的解决方案

    本文旨在解决%ignore_a_1%api调用中`future.get()`方法返回`null`的常见问题。当使用`callable`和`executorservice`并发执行api请求并尝试获取结果时,如果流读取逻辑不当,可能导致获取到的数据为空。文章将详细解释问题根源,并提供使用`string…

    2026年9月21日
    000
  • UC浏览器缓存清理失败怎么办 UC浏览器缓存管理优化方法

    先检查权限和存储空间,再用手机自带工具清理缓存文件夹,最后更新或重装UC浏览器解决清理失败问题。 UC浏览器缓存清理失败,通常不是按钮没反应,就是空间没释放。问题可能出在系统权限、文件顽固或设置冲突上。别急着重装,先试试这几个方法,基本能搞定。 检查应用权限与存储状态 如果UC浏览器自己都“进不去”…

    2026年9月21日
    000
  • 哪些Docker扩展能让你在VSCode内轻松管理容器?

    Docker官方扩展是VSCode中管理容器的核心工具,提供容器、镜像、卷、网络的可视化操作,结合Remote-Containers可实现容器内开发,辅以YAML、GitLens等扩展提升效率,需确保本地Docker daemon运行。 在 VSCode 中管理 Docker 容器,最核心的扩展是 …

    2026年9月21日
    000
  • UC浏览器自带的截图功能快捷键是什么 UC浏览器内置截图快捷键使用说明

    首先通过快捷键或图标触发截图,再选择区域完成截取。UC浏览器支持三种方式:1. 使用Ctrl+Shift+X(Windows)或Command+Shift+X(Mac)快捷键截图;2. 点击地址栏右侧剪刀图标进行全屏、可见区域或自定义截图;3. 在设置中启用手势控制,使用三指下滑手势快速截图。所有截…

    2026年9月21日
    000
  • 漫番漫画官方网页_ 漫番漫画在线访问入口

    漫番漫画官方网页入口为https://manwa.me,该平台汇聚多类型漫画资源,界面简洁、更新稳定,支持网页端流畅阅读;采用动态域名与镜像站点保障访问连续性,配备HTTPS加密提升安全性;提供个性化阅读设置、书架收藏及评论互动功能,优化用户体验。 漫番漫画官方网页入口地址在哪里?这是不少网友都关注…

    2026年9月21日
    200
  • Chrome浏览器怎么开启数据同步功能_Chrome浏览器跨设备数据同步设置教程

    首先登录Google账户启用Chrome同步功能,确保书签、历史记录、密码等数据跨设备一致;接着在设置中自定义同步内容类型以满足隐私需求;然后通过Google账户密钥或自定义密码加密同步数据,提升安全性;最后在新设备登录同一账户,自动接收已同步的浏览数据,实现无缝体验。 如果您希望在不同设备间无缝使…

    2026年9月21日
    000
  • VSCode代码编辑器在线使用_VSCode网页版免安装直接进入编辑

    答案:无需安装即可在浏览器使用VSCode,主要方式包括GitHub Codespaces、Gitpod、StackBlitz、CodeSandbox和自托管code-server,适用于不同场景,如GitHub集成、前端开发或完全控制环境;但存在网络依赖、性能限制、插件兼容性、文件访问和安全等局限…

    2026年9月21日
    100
  • VSCode远程开发:配置容器与SSH连接的最佳实践解析

    使用VSCode远程开发提升效率,通过Remote-Containers和Remote-SSH实现环境标准化。1. 配置.devcontainer文件夹,用devcontainer.json定义容器环境,推荐自定义Dockerfile并预装工具;2. SSH连接需配置公钥认证、~/.ssh/conf…

    2026年9月21日
    100
  • 美图秀秀导出视频卡住 美图视频保存失败修复方案

    导出视频卡住或保存失败,通常和设备性能、软件状态或操作方式有关。直接强制退出再尝试是很多人会做的,但更有效的是先排查具体原因。 检查设备资源与软件状态 导出视频是个高负载任务,容易因资源不足中断。 关闭后台应用:尤其是浏览器、游戏或其他大型程序,释放内存和处理器资源。 确认存储空间:确保手机或电脑有…

    2026年9月21日
    000
  • 谷歌浏览器新建窗口无法继承上次会话标签如何解决

    谷歌浏览器新建窗口无法继承上次会话标签如何解决谷歌浏览器新建窗口无法继承上次会话标签如何解决谷歌浏览器新建窗口无法继承上次会话标签如何解决谷歌浏览器新建窗口无法继承上次会话标签如何解决

    答案是检查“启动时”设置并确保选择“继续上次会话”。具体操作为:打开谷歌浏览器设置→启动时→选择“继续上次会话”;新建窗口默认不继承标签页属正常设计,可通过拖拽标签或使用扩展解决;若问题仍存,可检查策略、禁用扩展或重置设置。 谷歌浏览器新建窗口无法继承上次会话的标签页,通常是因为设置未开启或某些配置…

    2026年9月21日 用户投稿
    000
  • VSCode中怎么使用REM_VSCode移动端REM布局编写与换算教程

    答案:REM_VSCode插件可自动将像素转换为REM,需配置rootFontSize和precision,支持自动与手动转换,确保与html的font-size一致,配合media query适配不同屏幕,若插件异常可检查配置、重启或重装,替代工具有postcss-pxtorem、在线转换工具及浏…

    2026年9月21日
    100
  • UC浏览器如何开启省流模式_UC浏览器开启省流模式方法

    开启省流模式可减少UC浏览器流量消耗,通过设置菜单、首页快捷入口或搜索功能三种方式均可启用,系统会压缩网页内容以节省资源。 如果您在使用UC浏览器时希望减少数据流量消耗,尤其是在移动网络环境下,可以通过开启省流模式来优化网页加载方式。该功能会压缩页面内容,降低图片质量和资源体积,从而节省流量。 本文…

    2026年9月21日
    100
  • VSCode怎么新建ipynb文件_VSCode创建和编辑Jupyter笔记本文件教程

    答案:在VSCode中运行Jupyter笔记本需准备Python环境、安装Python扩展并确保安装ipykernel;通过命令面板或文件菜单新建笔记本,编辑时可添加代码或Markdown单元格,运行代码后结果实时显示;通过右上角内核选择器切换Python环境,推荐为不同项目配置独立虚拟环境以避免依…

    2026年9月21日
    200
  • UC浏览器下载速度慢怎么提升_UC浏览器下载速度提升方法

    开启极速模式、更换APN接入点、更改下载路径至内部存储、启用云端加速、清理缓存及切换网络环境可提升UC浏览器下载速度。 如果您在使用UC浏览器下载文件时遇到速度缓慢的问题,这可能是由于网络设置、缓存堆积或下载路径不佳所导致。以下是针对此问题的多种解决方法。 本文运行环境:小米14 Pro,Andro…

    2026年9月21日
    200
  • 夸克Ai搜索如何设置默认_夸克Ai搜索默认引擎更改

    首先在夸克APP中将默认搜索引擎设为AI引擎,再开启相关AI功能开关以启用AI搜索服务。具体步骤:1、打开夸克APP,点击右下角菜单进入设置;2、选择“通用”选项,点击“搜索引擎”;3、选择“AI引擎”或“夸克AI搜索”作为默认服务;4、返回主界面测试搜索关键词,确认AI结果是否展示;5、进入“AI…

    2026年9月21日
    400
  • Linux查看系统日志的常用命令

    答案是查看Linux日志需综合使用journalctl、dmesg、tail、grep等工具。journalctl用于systemd系统集中查询服务及内核日志,支持时间、优先级、字段等多维度过滤;dmesg专注内核启动与硬件问题;tail -f实时监控日志动态;cat、grep、less结合正则和管…

    用户投稿 2026年9月21日
    000
  • mysql如何实现后台管理系统

    答案:基于MySQL的%ignore_a_1%需设计用户、权限、日志等表结构,通过后端语言实现安全的CRUD接口与JWT认证,前端展示数据并控制权限,确保系统安全稳定。 实现一个基于 MySQL 的后台管理系统,核心是构建一个安全、稳定、可扩展的系统架构,将数据库作为数据存储层,配合后端语言和前端界…

    2026年9月21日
    000
  • 如何为VSCode设置自定义的代码高亮颜色?

    答案:通过settings.json中的editor.tokenColorCustomizations可自定义VSCode代码高亮颜色,支持全局或特定主题下修改关键字、字符串等元素颜色,结合textMateRules和作用域精确控制,提升代码可读性。 为 VSCode 设置自定义的代码高亮颜色,可以…

    2026年9月21日
    000
  • 百度浏览器自动跳转怎么办 百度浏览器页面跳转广告拦截方法

    百度浏览器自动跳转通常由恶意软件或设置被篡改引起,需检查浏览器设置、清除异常插件、修复快捷方式与注册表,并使用安全软件扫描清理,同时启用广告拦截与隐私保护功能以彻底解决问题。 百度浏览器出现自动跳转,通常不是浏览器本身的问题,而是由恶意软件、插件或设置被篡改导致的。解决这个问题需要从多个方面入手,检…

    2026年9月21日
    100
  • vivo浏览器如何开启硬件加速提升流畅度_vivo浏览器开启硬件加速提升浏览体验的方法

    开启硬件加速可改善vivo手机浏览器卡顿,首先在浏览器设置中查找并开启“硬件加速”功能;若无此选项,可进入系统“开发者选项”,启用“强制进行GPU渲染”;同时建议检查系统更新,确保系统版本最新以保障功能兼容性。 如果您在使用vivo手机内置浏览器时遇到页面加载缓慢或动画卡顿的情况,可能是由于硬件加速…

    2026年9月21日
    000

发表回复

登录后才能评论
关注微信