ES6对数组的扩展

扩展运算符 ...

扩展运算符...将数组转换为以逗号隔开的参数序列

  • ...后面可以是一个表达式,表达式返回一个数组
  • ...后面如果是空数组则不起任何作用
let m = 2,
  arr = [...(m > 1 ? [1, 2] : [3, 4])];

function fn(a, b, c) {
  return a + b + c;
}
console.log(fn(5, ...arr)); // 8

应用

替代applay

// 求数组最大值

// ES5
Math.max.apply(null, [5, 3, 7]);
// ES6
Math.max(...[5, 3, 7])

复制数组

完全复制,而非复制这个数组的引用

let arr = [3, 2, 5];

/* ES5 */
let a = arr.concat();

/* ES6 */
// 写法一
let b = [...arr];
// 写法二
let [...c] = arr;

console.log(a);
console.log(b);
console.log(c);

合并数组

let a = [1, 2],
  b = [3],
  c = [4, 5];

// ES5
let m = a.concat(b, c);

// ES6
let n = [...a, ...b, ...c];
console.log(m);
console.log(n);

和解构赋值结合

扩展运算符若用于赋值,只能放在最后,否则会报错

let [a,...b] = [1,2,3];
console.log(a); // 1
console.log(b); // [2,3]

// let [...b,a] = [1,2,3];  // 报错
let [m,...n] = [];
console.log(m); // undefined
console.log(n); // []

将具有Iterator接口的对象转换为数组

let a = [...'hello'];
console.log(a); // ["h", "e", "l", "l", "o"]
// querySelectorAll 方法返回的是 nodeList 对象,这个对象是类数组而不是真的数组,扩展运算符可将它转换为数组
let dvs = document.querySelectorAll('div'),
arr = [...dvs];

find,findIndex

find(fn,this),this可选,是 fn 的 this,对数组的每一项执行 fn ,直到找出第一个返回值为 true 的项,并返回该项,如果找不到符合条件的项则返回 undefined

findIndex 和 find 类似,返回第一个符合条件的项的位置,所有项都不符合的话返回 -1

fill

Array.from(a,fn)

  • 任何具有 length 属性的对象,都可以被 Array.from() 转换为数组,如 nodeList,arguments
  • a 若是真数组,则返回一个一模一样的新数组

Array.of()

Array.of()可接收多个参数,这些参数作为数组成员来生成一个数组

copyWithin()

接收三个参数,将数组指定位置的成员覆盖另一位置的成员,返回这个数组


猜你喜欢

转载自www.cnblogs.com/ak-b/p/9012782.html