js 创建 指定长度 指定相同参数 的数组

请补全JavaScript代码,要求返回一个长度为参数值并且每一项值都为参数值的数组。

注意:请勿直接使用for/while

 const _createArray = (number) => {
     // 补全代码
 }

参考文章

我的思路

下意识的想法是 使用Array(number)去创建长度为number的空数组,再用数组的forEachmap方法赋值即可,结果发现该数组不会被遍历,原因是:

forEach方法会按升序为数组中含有效值的每一项执行一次callback函数,而那些已删除(使用delete方法等情况)或未初始化的项将被跳过(但不包括值为undefined的项)

所以说,通过Array(number)new Array(number)创建的数组是一个有length属性的空数组,其中的每一项都还未被赋值(初始化),故会被forEachmap等方法跳过

Array(3) // [empty x 3] length:3
new Array(3) // [empty x 3] length:3

解题思路

创建指定长度的数组

思路1Array.apply()方法
Array.apply()方法接收两个参数,第一个为调用时指定的上下文,第二个为一个数组或者类数组对象

 Array.apply(null/0/[]/..., {length: 10})
 Array.apply(null/0/[]/..., Array(10))
 Array.apply(null/0/[]/..., new Array(10))
 
 // 这三个方法相当于

 Array(undefined, undefined, undefined, ...)

Array构造函数会根据给定的arguments来创建一个数组(如果不是仅有一个参数且为数字的话), 通过Array.apply传入一个length为10的空数组则相当于, 把一个空数组中的每一个元素的值逐个传入Array()方法, 而空数组中的每一个元素的值都是 undefined

思路2:es6提供了的一个新的api,Array.from()方法
Array.from()方法可以接受数组或类数组对象作为参数,(类数组对象,即类似数组的对象,本质特征只有一点,即必须有length属性)任何有length属性的对象,都可以通过Array.from方法转为数组

 Array.from({length:5})
 // [undefined, undefined, undefined, undefined, undefined]
 Array.from(Array(5))
 // [undefined, undefined, undefined, undefined, undefined]

思路3:es6的另一种写法,扩展运算符

 Array(...Array(5))
 [...Array(5)]
 // [undefined, undefined, undefined, undefined, undefined]

以上三种方法,都可生成被forEach或map等方法遍历的指定长度,值为undefined的数组

给指定长度的数组赋值

接下来就只需要赋值,除了forEach或map等遍历数组进行赋值的方法,我们还可以用Array.fill()方法或用上Array.from()的第二个参数

思路1Array.fill()方法
可以将数组的每一项都改编为指定的参数值

Array(3).fill(3)
//  [3, 3, 3]

思路2Array.from()的第二个参数
Array.from()方法接收两个参数时,第一个参数为数组或类对象,参数的length属性确定返回数组的长度,第二个参数为一个函数,第一个数组参数中的每一项都调用该函数

Array.from({length:5},()=>5)
// [5, 5, 5, 5, 5]

通过代码

 const _createArray = (number) => {
     // return Array.from(Array(number)).fill(number)
     // return Array.from({length:number},()=>number)
     // return Array(number).fill(number)
     // return [...Array(number)].fill(number)
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值