常用的Array 方法 in ES5、ES6、ES7

1,177 阅读3分钟

Array.from

从一个类似数组或可迭代对象中创建一个新的、浅拷贝的数组实例

/**
*  arrayLike 想要转换的对象
*  mapFn 每个元素会执行该回调函数后返回
*  执行mapFn时的this对象
*/
Array.from(arrayLike[, mapFn[, thisArg]])
Array.from('foo'); // ["f", "o", "o"]
Array.from(new Set['foo', window]); // ["foo", window]
Array.from(new Map([[1, 2], [2, 4], [4, 8]])); // [[1, 2], [2, 4], [4, 8]]
function f() {
return Array.from(arguments);
}
f(1, 2, 3); // [1, 2, 3]
Array.from([1, 2, 3], x => x + x); // [2, 4, 6]

Array.of

创建一个具有可变数量参数的新数组实例

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

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

Array.every

测试一个数组内的所有元素是否能通过指定函数的测试,遍历到不满足测试函数的元素时,直接中止

[1,3,5,7,9].every(x => x%2===1); // true

Array.some

测试是否至少有一个元素通过测试函数,返回布尔值。遇到满足测试函数的元素时,直接中止

[1,3,5,7,9].some(x => x%2===1);

Array.fill

用一个固定值填充数组中指定区间的全部元素

[1, 2, 3].fill(4, 1, 2);  // [1, 4, 3]
var arr = Array(3).fill({}); // [{}, {}, {}];
arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]

Array.filter

创建一个新数组,包含所有能通过指定函数测试的元素

[1,3,5,6,8,9].filter(x => x%2===1); // [1, 3, 5, 9]

Array.find & Array.findIndex

返回满足提供的测试函数的第一个元素的值&索引,都不满足返回undefined & -1

[1,2,4,7,8].find(x => x>5); // 7
[1,2,4,7,8].findIndex(x => x>5); //3

Array.flat

按照指定深度递归遍历数组,将所有元素与遍历到的子数组中的元素合并为一个新数组返回

[1,2,3,[4,5]].flat(); // [1,2,3,4,5]
[1,2,3,[4,[5,6]]].flat(); // [1,2,3,4,[5,6]]
[1,2,3,[4,[5,6]]].flat(2); // [1,2,3,4,5,6]
[1,[2,[3,[4,[5,6]]]]].flat(Infinity); // [1,2,3,4,5,6]

Array.flatMap

等同与Array.map().flat()

let arr = ["今天天气不错", "", "早上好"]
arr.map(s => s.split(""))
// [["今", "天", "天", "气", "不", "错"],[""],["早", "上", "好"]]
arr.flatMap(s => s.split(''));
// ["今", "天", "天", "气", "不", "错", "", "早", "上", "好"]

Array.forEach

对数组的每一个元素执行一次提供的函数,该方法只能通过抛出异常中止

var words = ['one', 'two', 'three', 'four'];
words.forEach(function(word) {
  console.log(word);
  if (word === 'two') {
    words.shift();
  }
});
// one
// two
// four

Array.includes

用来判断一个数组是否包含一个指定的值,返回布尔值;方法不能用来检测对象数组的值

['cat', 'dog', 'bat'].includes('cat'); // true
['cat', 'dog', 'bat'].includes('Cat'); // false
let option = {name: 'cat'};
[option,'dog','bat'].includes({name: 'cat'}); // false
[option,'dog','bat'].includes(option); // true

Array.push & Array.pop & Array.unshift & Array.shift

为数组增加删除元素的方法

let arr = [1,2,3];
arr.push(4,5); // 5
console.log(arr); // [1,2,3,4,5]
arr.pop(); // 5
console.log(arr); // [1,2,3,4]
arr.unshift(6,7); // 6
console.log(arr); // [6,7,1,2,3,4]
arr.shift(); // 6
console.log(arr); // [7,1,2,3,4]

Array.reduce

对数组中的每一个元素执行提供的reducer函数,将结果汇总为单个返回值

/**
* accumulator累计器
* currentValue 当前元素
* initialValue 累计器初始值
*/
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
[0, 1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => { return accumulator + currentValue; }, 10 );  // 10+0+1+2+3+4 = 20

Array.splice

对指定位置的进行元素的删除、新增、替换等操作,并返回被修改的内容。会改变原数组

/**
* start 修改的开始位置
* deleteCount 要移除的数组元素个数  0或负数表示不删除
* items 需要添加进数组的元素
*/
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
var removed = myFish.splice(2, 1, "trumpet"); // ["drum"] myFish: ["angel", "clown", "trumpet", "sturgeon"]