【前端面试】创建长度为100,内容为下标的数组,你能想到几种方法?
程序员文章站
2022-04-22 21:49:05
...
使用循环
var arr = [];
for(let i=0; i<100; i++){
arr.push(i);
}
//或者
var arr = new Array(100)
var i=arr.length
while(i--){
arr[i] = 0;
}
使用递归
function genArr(i, j, arr){
if(i < j){
arr[i] = i++
return genArr(i, j, arr);
} else {
return arr;
}
}
var arr = genArr(0, 100, [])
使用Array.keys() + …运算符
[...Array(10).keys()]
使用数组自带的map方法
Array(100).join(",").split(",").map(function(key,index){
return index;
})
//之所以要join一下再split,而不直接用Array(100).map()
//是因为Array(100)得到是长度为100,但是没有内容的数组
Array.from 和 Array.apply
- Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。
- 所谓类似数组的对象,本质特征只有一点,即必须有length属性。因此,任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。
- Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
Array.from({length:100} , function(value, index){
return index
})
//等同于
Array.from({length:100}).map(function(value, index){
return index
})
//等同于
Array.apply(null, {length: 100}).map(function(value, index){
return index
})
//为什么这里可以用map了,是因为这两个方法的确生成了对应下标的内容,只不过内容为undefined。