相关文章推荐
大方的香烟  ·  JavaScript Array ...·  1 月前    · 
跑龙套的单杠  ·  分享6个对象数组去重的方法开发者社区·  1 月前    · 
刚失恋的黄瓜  ·  为什么C数组下标从0开始,而不是从1开始_c ...·  1 月前    · 
冷冷的草稿本  ·  txt文件转数组_python读取txt为数组·  1 月前    · 
道上混的创口贴  ·  Array.prototype.some() ...·  2 周前    · 
完美的开心果  ·  关于数组的各项须知内容 - ...·  4 月前    · 
苦恼的羊肉串  ·  WPF路由事件二:路由事件的三种策略 - ...·  1 年前    · 
欢快的围巾  ·  java中UTC时间字符串怎么转为Local ...·  1 年前    · 
睿智的椰子  ·  Sql中DIstinct与Order ...·  2 年前    · 
高兴的硬币  ·  Android ...·  2 年前    · 
Code  ›  4个常用的 JS 数组内容默认填充方法开发者社区
js 数组
https://cloud.tencent.com/developer/article/1898192
严肃的黄瓜
2 年前
作者头像
前端达人
0 篇文章

4个常用的 JS 数组内容默认填充方法

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 前端达人 > 4个常用的 JS 数组内容默认填充方法

4个常用的 JS 数组内容默认填充方法

作者头像
前端达人
发布 于 2021-11-08 11:32:50
792 0
发布 于 2021-11-08 11:32:50
举报

在 JavaScript 中,我们往往会遇到需要使用某些默认值来填充数组的情况,那么都有哪些方式可以完成这样的功能呢?

方式一:使用Array.fill

数组实例上可用的array.fill(initalValue)方法是一种初始化数组的便捷方法:当在数组上调用该方法时,整个数组都用填充初始值,并返回修改后的数组。比如:

const filledArray = Array(3).fill(0);
filledArray; // [0, 0, 0]

如果需要用对象填充数组怎么办?

const filledArray = Array(3).fill({ value: 0 });
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]

但是需要注意的是:这种方法创建了一个具有相同对象实例的数组。如果你碰巧修改了数组中的任何一项,那么数组中的每一项都会受到影响:

const filledArray = Array(3).fill({ value: 0 });
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
filledArray[1].value = 3;
filledArray; // [{ value: 3 }, { value: 3 }, { value: 3 }]

方式二:使用Array.from()

Array.from(array, mapperFunction) 接受 2 个参数:一个数组(通常是一个可迭代的)和一个映射器函数。

mapperFunction对数组的每一项调用,将结果推送到新数组,最后返回新映射的数组。

因此Array.from()方法可以轻松地创建和初始化具有不同对象实例的数组:

const filledArray = Array.from(Array(3), () => {
   return { value: 0 };
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
filledArray[1].value = 3;
filledArray; // [{ value: 0 }, { value: 3 }, { value: 0 }]

可以看到修改数组中的任何一个对象,则只有该对象会受到影响,其他对象是不受影响的。

方式三:使用展开操作符...加array.map()

我们知道直接使用Array(length)以创建数组的情况下,数组内元素为empty,如下:

const sparseArray = Array(3);
sparseArray; // [empty × 3]

new Array(arrayLength) 方式构造的数组是一个稀疏数组,里面是没有任何值的,只有长度。所以这个方式构造出来的数组是无法遍历的,也就无法用 map 遍历填充值了。

这里我们通过使用展开操作符可以展开一个数组,然后从展开的数组中再创建一个新的数组。使用这种方式,我们避免了使用 fill 方法,但是我们依旧使用了 map 方法。

const filledArray = [...Array(3)].map(() => {
  return { value: 0 };
filledArray; // [{ value: 0 }, { value: 0 }, { value: 0 }]
filledArray[1].value = 3;
 
推荐文章
大方的香烟  ·  JavaScript Array filter() 方法 |
1 月前
跑龙套的单杠  ·  分享6个对象数组去重的方法开发者社区
1 月前
刚失恋的黄瓜  ·  为什么C数组下标从0开始,而不是从1开始_c语言数组从0开始还是从1开始
1 月前
冷冷的草稿本  ·  txt文件转数组_python读取txt为数组
1 月前
道上混的创口贴  ·  Array.prototype.some() - JavaScript | MDN
2 周前
完美的开心果  ·  关于数组的各项须知内容 - PowerShell | Microsoft Learn
4 月前
苦恼的羊肉串  ·  WPF路由事件二:路由事件的三种策略 - .NET开发菜鸟 - 博客园
1 年前
欢快的围巾  ·  java中UTC时间字符串怎么转为LocalDateTime - CSDN文库
1 年前
睿智的椰子  ·  Sql中DIstinct与Order By同时使用问题_艾米莉亚糖的博客-CSDN博客
2 年前
高兴的硬币  ·  Android 动态毛玻璃背景的简单实现(高斯模糊)_android实现简单高斯模糊背景_Lp0int的博客-CSDN博客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号