创建并填充长度为100的数组

一、万恶之源

1、"请创建一个长度为100的数组,每项的值都是1"

Array(100).fill(1)
1

2、"请创建一个长度为100的数组,每项的值是它们的下标"

[...Array(100).keys()]
或者
Array(100).fill().map((v, i) => i)
1
2
3

二、Array对象

JavaScript中的 Array对象 是用来 构造数组 的全局对象。用该对象创建数组的方法如下:

[element0, element1, ..., elementN]
new Array(element0, element1[, ...[, elementN]])
new Array(arrayLength)
1
2
3

可以看到当我们使用 new Array(arrayLength) 时,创建的是一个指定长度的数组,如下:

new Array(5)

输出:[empty × 5]

所以我们可以用 new Array(arrayLength) 来快速生成一个指定长度的数组,这就解决我们前半个问题—— "生成长度为100的数组" ,这里我们只需要

new Array(100)
1

三、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)
1

即:先创建一个长度为100的数组,然后每项填充1

五、keys、map方法以及展开运算符

同样的,keysmap 方法,也是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]
1
2
3
4
5

map 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。

示例:

let numbers = [1, 4, 9];
let roots = numbers.map(Math.sqrt);
// roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]
1
2
3

而展开运算符(...)的作用是在语法层面上将数组展开,如:

console.log(...[1,2,3])
输出:1 2 3
1
2

六、解决第二个问题

那既然我们能通过Array().keys()拿到数组下标组成的迭代器对象,那我们就可以这样解决第二个问题。

2、"请创建一个长度为100的数组,每项的值是它们的下标"

[...Array(100).keys()]
1

即:先创建一个长度为100的数组,然后拿到它的下标所组成的迭代器对象,再将这个对象展开成并用数组包裹

而使用map的方法则更简单

Array(100).fill().map((x, i) => i)
1

即:先创建一个长度为100的数组,然后每项填充为空,再通过map返回给每项的下标

总结

在JS的Array对象中

fill()方法

用于填充指定索引中的值,默认为全部填充。

keys()方法

用于获取由数组下标组成的可迭代对象。

map()方法

用于遍历数组并返回一个由函数生成的新的数组。

...展开运算符

将数组表达式或者string在语法层面展开。

而实现快速创建指定长度数组并填充,我们就可以灵活运用这几种方法来灵活实现

keys方法
[...Array(100).keys()]

map方法
Array(100).fill().map((x,i) => i)
1
2
3
4
5

总之,问题只有一个,而解决问题的方法有很多,要多熟悉js的基本语法,书写代码才能更加得心应手。

上次更新: 4/21/2019, 11:47:39 AM