Array
数组是一种类列表对象,它的原型中提供了遍历和修改元素的相关操作。JavaScript 数组的长度和元素类型都是非固定的。因为数组的长度可随时改变,并且其数据在内存中也可以不连续,所以 JavaScript 数组不一定是密集型的,这取决于它的使用方式。
常用方法
map()
创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成
``` const array1 = [1, 4, 9, 16];
// pass a function to map const map1 = array1.map(x => x * 2);
console.log(map1); // expected output: Array [2, 8, 18, 32] ```
lastIndexOf()
返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从
fromIndex
处开始。
``` const animals = ['Dodo', 'Tiger', 'Penguin', 'Dodo'];
console.log(animals.lastIndexOf('Dodo')); // expected output: 3
console.log(animals.lastIndexOf('Tiger')); // expected output: 1
```
keys()
返回一个包含数组中每个索引键的
Array Iterator
对象。
``` const array1 = ['a', 'b', 'c']; const iterator = array1.keys();
for (const key of iterator) { console.log(key); }
// expected output: 0 // expected output: 1 // expected output: 2 索引迭代器会包含那些没有对应元素的索引
var arr = ["a", , "c"]; var sparseKeys = Object.keys(arr); var denseKeys = [...arr.keys()]; console.log(sparseKeys); // ['0', '2'] console.log(denseKeys); // [0, 1, 2] ```
join()
将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。
``` const elements = ['Fire', 'Air', 'Water'];
console.log(elements.join()); // expected output: "Fire,Air,Water"
console.log(elements.join('')); // expected output: "FireAirWater"
console.log(elements.join('-')); // expected output: "Fire-Air-Water" `` 如果一个元素为
undefined 或
null`,它会被转换为空字符串。
var a = ['Wind', 'Rain', 'Fire']; var myVar1 = a.join(); // myVar1 的值变为"Wind,Rain,Fire" var myVar2 = a.join(', '); // myVar2 的值变为"Wind, Rain, Fire" var myVar3 = a.join(' + '); // myVar3 的值变为"Wind + Rain + Fire" var myVar4 = a.join(''); // myVar4 的值变为"WindRainFire"
indexOf()
返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
``` const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('bison')); // expected output: 1
// start from index 2 console.log(beasts.indexOf('bison', 2)); // expected output: 4
console.log(beasts.indexOf('giraffe')); // expected output: -1 ```
includes()
用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回
true
,否则返回false
。
``` const array1 = [1, 2, 3];
console.log(array1.includes(2)); // expected output: true
const pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat')); // expected output: true
console.log(pets.includes('at')); // expected output: false ```
forEach()
对数组的每个元素执行一次给定的函数。
``` const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// expected output: "a" // expected output: "b" // expected output: "c" ```
flatMap()
首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 连着深度值为 1 的 flat 几乎相同,但 flatMap 通常在合并成一种方法的效率稍微高一些。
``` const arr1 = [1, 2, [3], [4, 5], 6, []];
const flattened = arr1.flatMap(num => num);
console.log(flattened); // expected output: Array [1, 2, 3, 4, 5, 6] ```
map() 与 flatMap()区别 ``` var arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]); // [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]); // [2, 4, 6, 8]
// only one level is flattened arr1.flatMap(x => [[x * 2]]); // [[2], [4], [6], [8]] ```