js 创建 指定长度 指定相同参数 的数组
创始人
2025-05-31 12:14:37

请补全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)}

相关内容

热门资讯

工伤保险对劳动者的积极意义 阶...   工伤保险对劳动者有什么积极意义?   工伤保险制度的贯彻实施,对劳动者的意义主要体现以下几点: ...
辽宁关于调整最新或2023(历...   辽宁最新或2023(历届)工伤保险待遇调整的指导意见   一级、二级、三级、四级工伤人员伤残津贴...
最新或2023(历届)聊城工伤...   最新或2023(历届)-最新或2023(历届)度聊城工伤保险协议服务机构   从聊城市社会劳动保...
内蒙古二连浩特最新或2023(...   二连浩特市最新或2023(历届)前季度工伤保险情况分析   最新或2023(历届)前三季度,市人...
环卫工人的工伤应该由谁埋单? ...   谁该为环卫工人的工伤埋单   据深圳市公安局官方微博消息,昨天清晨7时10分许,两名环卫工在洪湖...