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/95979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月19日 19:58:23
下一篇 2025年11月19日 20:31:58

相关推荐

  • XML与二进制XML比较

    XML与二进制XML的核心区别在于数据表示方式:XML为人类可读的文本格式,结构清晰但冗余大、解析慢;二进制XML将数据编码为紧凑的二进制形式,显著减小体积、提升解析效率,但牺牲了可读性与调试便利性。前者适用于注重互操作性与易维护的场景,后者则在带宽、性能受限的系统(如物联网、高并发实时服务)中更具…

    好文分享 2025年12月17日
    000
  • XML格式的环境监测数据

    环境监测数据XML化的核心优势在于其自描述性和可扩展性。通过XML Schema(XSD)定义统一结构,实现异构数据的标准化表达,确保PM2.5、温度、湿度等多源信息在语义清晰的前提下高效集成与交换;其标签化设计使数据具备可读性与机器可解析性,支持跨系统互操作;结合“核心+扩展”模型,在规范元数据的…

    2025年12月17日
    000
  • XML DOM树的基本概念是什么?

    XML DOM树将XML文档解析为内存中的树状结构,便于程序通过标准化API访问和操作各节点。文档被视作“Document”根节点,其元素、属性、文本、注释等均抽象为节点,形成父子兄弟关系的层级结构。例如,作为根元素节点,包含多个子节点,每个子节点又包含、等子元素及文本内容,注释也作为独立节点存在。…

    2025年12月17日
    000
  • XML数据版本迁移方案

    XML数据版本迁移需制定清晰转换规则,确保旧结构平滑适配新需求。首先进行现状评估与需求分析,明确新旧XML结构差异及业务痛点;接着建立详细的映射表,涵盖一对一、一对多、多对一、数据类型转换、默认值填充、条件转换和废弃字段处理等规则;然后选择合适工具如XSLT、编程语言脚本或ETL工具实现转换逻辑;最…

    2025年12月17日
    000
  • XML注释的语法格式是什么?

    XML注释以结束,用于添加不影响解析的说明性内容,提升文档可读性与维护性。1. 注释不可含连续两个连字符(–),否则会导致XML解析错误,而HTML对此较宽容。2. 应侧重解释“为什么”而非“是什么”,避免冗余。3. 可用于模块分隔、临时禁用配置、标记待办事项等高级用途,增强大型文档结构…

    2025年12月17日
    000
  • 什么是XLink?如何创建XML超链接

    XLink是XML中定义超链接的标准,通过xlink命名空间属性实现资源间的复杂关联。它支持simple和extended等链接类型,提供比HTML更灵活的多向、语义化链接,适用于文档管理、元数据关联等结构化场景。 XLink,简单来说,就是XML世界里定义超链接的一种标准。它提供了一种比HTML更…

    2025年12月17日
    000
  • XML在电子商务中的典型应用有哪些?

    XML通过标准化标签实现电商数据无缝集成,其结构化与可扩展性支持商品、订单、库存等信息在不同系统间准确交换;借助XML Schema可严格验证数据格式与内容,确保传输一致性,避免错误,提升互操作性与数据质量。 XML在电子商务中的核心作用,无疑是作为一种强大而灵活的数据交换语言。它让不同系统之间,无…

    2025年12月17日
    000
  • 如何转换XML到PDF文档

    将XML转换为PDF需通过XSLT/XSL-FO或编程库实现,因XML仅描述数据结构而PDF需布局信息。主流方法有两种:一是使用XSLT将XML转为XSL-FO,再用FO%ignore_a_1%(如Apache FOP)渲染成PDF,优势在于数据与样式分离、易于维护和标准化,适合批量生成合同、发票等…

    2025年12月17日
    000
  • 什么是WAP?XML在移动端应用

    WAP是早期移动互联网的里程碑,通过WML和专用协议在低带宽环境下实现基础网络服务,虽因体验差被淘汰,但为后续发展铺路;XML则是移动开发中的核心工具,广泛用于Android的UI布局、应用配置、资源管理、数据交换与矢量图形,以其结构化和可扩展性持续发挥不可替代作用。 WAP,即无线应用协议,是早期…

    2025年12月17日
    000
  • 什么是CMIS?基于XML的标准

    CMIS通过定义通用API和使用XML格式实现不同CMS间互操作,支持RESTful API、云原生架构及未来GraphQL与AI集成,提升内容管理灵活性与效率。 CMIS(内容管理互操作性服务)是一种开放标准,旨在让不同的内容管理系统(CMS)能够相互通信和交换信息。本质上,它就像一种通用的“语言…

    2025年12月17日
    000
  • XML标准化组织有哪些

    XML标准化主要由W3C、OASIS及ISO/IEC JTC 1推动:W3C制定基础性通用规范如XML 1.0、XPath等,奠定技术基石;OASIS聚焦企业级应用如SAML、ODF,解决行业互操作问题;ISO/IEC则通过国际标准流程提升已有规范的全球认可度。三者协同构建了从底层语法到行业应用的完…

    2025年12月17日
    000
  • XML格式的食品安全数据

    XML在食品安全追溯中关键在于其标准化结构,它通过统一的数据格式实现供应链各环节信息的高效交换与追溯。1. XML提供清晰的数据元素,确保成分、批次、检测结果等信息完整且可解析;2. 其开放性支持跨系统互操作,使不同主体间数据无缝对接;3. 结构化框架提升合规审查效率和问题响应速度;4. 与区块链结…

    2025年12月17日
    000
  • XML格式的医疗影像数据标准

    XML在医疗影像中作为DICOM的互补标准,通过结构化元数据提升数据互操作性。它整合PACS、RIS、EMR等系统信息,增强语义描述,支持IHE XDS-I、HL7 FHIR等协议实现跨机构共享,并通过Schema定义实现影像研究的索引、检索与长期归档,形成“内容(DICOM)+目录(XML)”协同…

    2025年12月17日
    000
  • 如何用XML表示表格数据

    XML表示表格数据的核心是利用其层级结构和自描述性,通过根元素、行元素及列元素的嵌套清晰映射表格结构,如下包含多个行,每行内以、等子元素表示单元格数据;优势在于语义明确、支持复杂结构与元数据(如id属性),便于跨系统交换;常见模式为行包裹列,数据作为元素内容、标识符作为属性,并推荐使用XSD定义结构…

    2025年12月17日
    000
  • RSS订阅中的统计跟踪方法

    答案:RSS订阅统计主要依赖服务器日志、跟踪像素、第三方聚合服务和UTM参数,可获取请求频率、估算订阅量、内容受欢迎度、点击来源及粗略地理位置,但受限于协议无状态性和阅读器缓存机制,难以精准追踪个体用户行为。 RSS订阅的统计跟踪,坦白说,不像网站访问那样有一套成熟且精确的体系。它主要依赖于服务器日…

    2025年12月17日
    000
  • RSS订阅中的用户反馈机制

    答案:RSS用户反馈机制通过引入互动功能,将单向订阅转化为双向交流。它解决内容孤岛、缺乏参与感等问题,借助内嵌链接、API集成等方式实现点赞、评论等操作,提升内容质量与用户体验,推动RSS生态向更开放、动态的方向发展。 RSS订阅中的用户反馈机制,核心在于将原本单向的内容分发模式,转化为一个更具互动…

    2025年12月17日
    000
  • XML与JSON数据格式如何选择?

    答案:选择XML还是JSON取决于数据结构复杂性、传输场景和可读性需求。JSON更适合轻量级Web应用和API交互,因其解析快、体积小、与JavaScript亲和;XML则在需要严格校验、复杂文档结构或企业级集成时更具优势,尤其适用于SOAP协议、配置文件等场景。两者各有侧重,关键在于匹配具体需求。…

    2025年12月17日
    000
  • XML如何表示基因序列? 用XML标注基因序列结构与生物信息的规范格式

    XML表示基因序列需定义清晰可扩展的标签体系,如用包含序列、特征等信息,通过XML Schema实现数据验证与约束,并利用XPath、XSLT及编程语言进行检索分析,提升数据互操作性与可靠性。 XML表示基因序列,本质上就是用XML的标签和属性来描述基因序列及其相关的生物信息。 关键在于选择合适的标…

    2025年12月17日
    000
  • XInclude如何实现XML模块化?

    XInclude是一种XML模块化技术,通过元素将外部XML文件或其特定部分嵌入文档,实现内容复用与维护。它基于XML信息集操作,支持命名空间和XPointer定位,相比实体引用更强大、灵活。常见挑战包括循环引用、Base URI解析、验证复杂性、性能开销及工具支持差异。此外,XML Schema模…

    2025年12月17日
    000
  • XML格式的基因数据标准

    XML基因数据标准是解决数据碎片化和互操作性问题的必要手段,通过自描述、可扩展的结构统一基因序列、表达和变异信息的表示方式,实现跨平台共享与机器解析;其核心优势在于标签化和嵌套结构,能清晰表达数据层次与语义,如MAGE-ML用于微阵列数据、SBML用于系统生物学模型;尽管存在文件冗余和解析效率瓶颈,…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信