相关文章推荐
道上混的创口贴  ·  Array.prototype.some() ...·  2 月前    · 
瘦瘦的棒棒糖  ·  OpenCV 4基础篇| ...·  1 月前    · 
文武双全的圣诞树  ·  will-change - CSS | MDN·  6 月前    · 
善良的创口贴  ·  matlab多项式逻辑回归 - CSDN文库·  1 年前    · 
谦逊的苦瓜  ·  美国的“官方爆料”真是造谣无底线(望海楼)·  1 年前    · 
谦和的乌冬面  ·  MultipartFile的transfer ...·  1 年前    · 
温柔的上铺  ·  在言情文里撩直男男主by辞奺 闻玉书 喜欢 ...·  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;
 
推荐文章
道上混的创口贴  ·  Array.prototype.some() - JavaScript | MDN
2 月前
瘦瘦的棒棒糖  ·  OpenCV 4基础篇| OpenCV图像基本操作开发者社区
1 月前
文武双全的圣诞树  ·  will-change - CSS | MDN
6 月前
善良的创口贴  ·  matlab多项式逻辑回归 - CSDN文库
1 年前
谦逊的苦瓜  ·  美国的“官方爆料”真是造谣无底线(望海楼)
1 年前
谦和的乌冬面  ·  MultipartFile的transferTo()方法详解 - 知乎
1 年前
温柔的上铺  ·  在言情文里撩直男男主by辞奺 闻玉书 喜欢... 来自招财汪布丁仔 - 微博
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号