创建并填充长度为100的数组
一、万恶之源
1、"请创建一个长度为100的数组,每项的值都是1"
Array(100).fill(1)
2、"请创建一个长度为100的数组,每项的值是它们的下标"
[...Array(100).keys()]
或者
Array(100).fill().map((v, i) => i)
2
3
二、Array对象
JavaScript中的 Array对象 是用来 构造数组 的全局对象。用该对象创建数组的方法如下:
[element0, element1, ..., elementN]
new Array(element0, element1[, ...[, elementN]])
new Array(arrayLength)
2
3
可以看到当我们使用 new Array(arrayLength) 时,创建的是一个指定长度的数组,如下:
new Array(5)
输出:[empty × 5]
所以我们可以用 new Array(arrayLength) 来快速生成一个指定长度的数组,这就解决我们前半个问题—— "生成长度为100的数组" ,这里我们只需要
new Array(100)
三、fill方法
fill 方法是js Array对象中的一个方法,它的作用是:
用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。
当然你也可以指定填充的索引,只不过默认情况下,fill方法中的开始索引是 0 ,结束索引是 this.length ,语法如下:
array.fill(value, start, end)
其中,start和end是 可选的
四、解决第一个问题
那既然fill方法会默认填充数组下标从0到数组长度的所有元素,那么,配合new Array(arrayLength),我们就可以解决第一个问题
1、"请创建一个长度为100的数组,每项的值都是1"
new Array(100).fill(1)
即:先创建一个长度为100的数组,然后每项填充1
五、keys、map方法以及展开运算符
同样的,keys 、map 方法,也是js Array对象中的一个方法,它的作用是:
keys 返回一个包含数组中每个索引键的 Array 迭代器对象。
示例:
let arr = ["a", , "c"];
let sparseKeys = Object.keys(arr);
let denseKeys = [...arr.keys()];
console.log(sparseKeys); // ['0', '2']
console.log(denseKeys); // [0, 1, 2]
2
3
4
5
map 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
示例:
let numbers = [1, 4, 9];
let roots = numbers.map(Math.sqrt);
// roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]
2
3
而展开运算符(...)的作用是在语法层面上将数组展开,如:
console.log(...[1,2,3])
输出:1 2 3
2
六、解决第二个问题
那既然我们能通过Array().keys()拿到数组下标组成的迭代器对象,那我们就可以这样解决第二个问题。
2、"请创建一个长度为100的数组,每项的值是它们的下标"
[...Array(100).keys()]
即:先创建一个长度为100的数组,然后拿到它的下标所组成的迭代器对象,再将这个对象展开成并用数组包裹
而使用map的方法则更简单
Array(100).fill().map((x, i) => i)
即:先创建一个长度为100的数组,然后每项填充为空,再通过map返回给每项的下标
总结
在JS的Array对象中
fill()方法
用于填充指定索引中的值,默认为全部填充。
keys()方法
用于获取由数组下标组成的可迭代对象。
map()方法
用于遍历数组并返回一个由函数生成的新的数组。
...展开运算符
将数组表达式或者string在语法层面展开。
而实现快速创建指定长度数组并填充,我们就可以灵活运用这几种方法来灵活实现
keys方法
[...Array(100).keys()]
map方法
Array(100).fill().map((x,i) => i)
2
3
4
5
总之,问题只有一个,而解决问题的方法有很多,要多熟悉js的基本语法,书写代码才能更加得心应手。