js array方法

200 阅读5分钟

concat() [纯函数]

concat()方法用于合并两个或多个数组,此方法不会改变现有数组。

const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array3);
// ["a", "b", "c", "d", "e", "f"]

copyWithin() [纯函数]

copyWithin() 方法浅复制数组的一部分到同一数组的另一个位置,不会改变原数组的长度。

const array1 = ['a', 'b', 'c', 'd', 'e'];
console.log(array1.copyWithin(0, 2, 4));
// ["c", "d", "c", "d", "e"]
 第一个参数:复制后的数据,插入到第index个位置
 第二个参数:开始复制元素的起始位置
 第三个参数:开始复制元素的结束位置

entries()

entries()方法返回一个新的array iterator对象,包含数组中每个索引的键值对
返回值是一个新的array迭代器对象,它的原型上有一个next方法,可以用于遍历迭代器取得原数组的[key, value];

var arr = ["a", "b", "c"];
var iterator = arr.entries();
iterator.next().value;
// [0, a];
// 用for of 循环
for (let [key, value] of iterator) {
    console.log(key, value);
}
// 0 'a'   1 'b'   2 'c'

every()

every()方法测试一个数组中的所有元素是否都能通过某个指定函数的测试
如果传入的是一个空数组,则始终会返回true

const arr = [];
arr.every((item, index) => {
    // todo...
})

fill()

fill()方法用一个固定值填充一个数组,从起始位置到终止索引内的全部元素
第一个参数: value 需要填充的数据
第二个参数: startIndex 起始索引
第三个参数: endIndex 终止索引

filter() [纯函数]

filter()方法返回创建一个新的数组,其中包含所有通过指定函数测试的元素, 通常用来过滤数据,生成一个新的数组
如果没有任何元素通过测试,则返回空数组

find() [纯函数]

find()方法返回数组中满足提供的函数测试的第一个值,否则返回undefined

findIndex() [纯函数]

findIndex()方法返回数组中满足提供的函数测试的第一个元素的索引,否则返回-1

flat() [纯函数]

flat() 方法会按照一个可指定的深度,递归遍历数组,并将所有的元素与遍历到的子数组中的元素合并为一个新的数组返回
参数:指定要提取的嵌套数组的结构深度吗,默认为1
该方法会移除数组中的空项

使用`Infinity`可以展开任意深度的嵌套数组
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

替代方案:
reducer + concat
forEach + concat + push

forEach()

forEach()方法对数组的每个元素执行一次给定的函数

Array.from()

Array.from()方法从一个类似数组或可迭代对象中创建一个新的,浅拷贝的数组实例
可以通过以下方式来创建数组对象:

  1. 拥有一个length属性和若干索引属性的任意对象
  2. 可迭代对象 (Map和Set等)
console.log(Array.from('foo'));
// ["f", "o", "o"]
set //
const set = new Set(['foo', 'bar', 'baz', 'foo']);
Array.from(set);
// [ "foo", "bar", "baz" ]
map //
const map = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(map);
// [[1, 2], [2, 4], [4, 8]]

includes()

includes()方法判断一个数组中是否包含一个指定的值

indexOf()

indexOf()方法返回数组中找到一个给定元素的第一个索引,如果不存在,则返回-1

Array.isArray()

Array.isArray()方法用于判断传递的值是否是一个数组

join()

join()方法将一个数组的所有元素连接成一个字符串并返回这个字符串

keys()

keys()方法返回一个包含数组中每个索引键的Array Iterator对象 不知道有什么场景下需要这个

lastIndexOf()

lastIndexOf()方法返回指定元素在数组中的最后一个的索引,如果不存在则返回-1

map()

map()方法创建一个新的数组,其结果是改数组中每个元素调用一次提供的函数后的返回值

const arr = [1,2,3];
const newArr = arr.map(item => ...)

Array.of()

Array.of()方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量和类型
Array.of()Array构造函数的区别在于:

  • Array.of(7)创建一个具有单个元素7的数组
  • Array(7)创建一个长度为7的空数组(是指一个有7个空位的数组,而不是7个undefined组成从数组)
Array.of(7);       // [7]
Array.of(1, 2, 3); // [1, 2, 3]

Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]

pop() [改变数组长度]

pop()方法删除数组中组后一个元素,并返回该值

push()

push()方法返回一个或多个元素添加到数组的末尾,并返回该数组的新长度

reduce()

reduce()方法对数组中的每个元素执行提供的reduce函数,并将其结果汇总为单个返回值

reduceRight()

reduceRight()方法接受一个函数作为累加器和数组的每个值(从右到左)

reverse() [改变原数组]

reverse()方法反转数组中的元素,并返回该数组

shift() [改变数组长度]

shift()方法从数组中删除第一个元素的值,并返回改元素的值

slice() [纯函数]

slice()方法返回一个新的数组对象,由开始索引到结束索引的原数组的浅拷贝

splice() [改变原数组]

splice()方法通过删除或替换现有元素或原地添加现有元素来修改数组,并以数组形式返回被修改的元素

some()

some()方法测试数组中是否至少有一个元素通过了提供的测试函数,返回boolean

sort()

sort()方法对数组的元素进行排序,并返回数组,默认排序是将元素转换为字符串,然后比较它们的UTF-16代码单元值

如果指明了排序函数,
    - 如果fun(a,b) < 0, 那么a会被排列在b之前
    - 如果fun(a,b) = 0, 那么a和b的位置不变
    - 如果fun(a,b) > 0, 那么a会被排列在b之后
    

toString()

toString()方法返回一个字符串,表示指定的数组及其元素

unshift()[改变原数组]

unshift()方法将一个或多个元素添加到数组的开头,并返回数组的新长度

values()

values()方法返回一个新的Array Iterator对象,改对象包含数组每个索引的值