-
将数组变成参数化序列
function plus(x, y) {
return x + y;
}
const numbers = [1, 2];
console.log(...numbers) // 1 2
console.log(plus(...numbers)) //3
-
复制数组
// ES5
const a1 = [1, 2];
const a2 = a1.concat();
// ES6
const a1 = [1, 2];
const a2 = [...a1];
-
合并数组
let a1 = [1,2]
let a2 = [3,4]
let a3 = [1,4]
// ES5
let a = a1.concat(a2, a3); // [1, 2, 3, 4, 1, 4]
// ES6
let a = [...a1, ...a2, ...a3] // [1, 2, 3, 4, 1, 4]
-
和解构赋值结合生成数组(扩展运算符参数必须在最后一位)
let [a1, ...list] = [1, 2, 3, 4, 5];
console.log(list) // [2, 3, 4, 5]
let [...list, a1] = [1, 2, 3, 4, 5];
console.log(list) // Uncaught SyntaxError: Rest element must be last element
let [a1, ...list, a2] = [1, 2, 3, 4, 5];
console.log(list) // Uncaught SyntaxError: Rest element must be last element
-
使用Math函数
let a1 = [1, 2, 4, 5];
// ES5 的写法
Math.max.apply(null, a1) // 5
// ES6 的写法
Math.max(...a1) // 5
-
和set结构结合实现数组或字符串去重
let a1 = [1, 2, 3, 4, 1, 4];
// Array.from
console.log(Array.from(new Set(a1))) // [1, 2, 3, 4]
// 展开运算符
console.log([...new Set(a1)]) // [1, 2, 3, 4]
//字符串去重
console.log([...new Set('ababbc')].join('')) // abc
-
拷贝对象(等价于Object.assign(),所以第一级对象为深拷贝,以后级别为浅拷贝)
let a1 = { a: 1, b: 2 };
// Object.assign
let a2 = Object.assign({}, a1);// { a: 1, b: 2 }
// 扩展运算符
let a2 = { ...a1 }; // { a: 1, b: 2 }
-
合并对象(多个对象有同名属性,则后面的会覆盖前面的)
let a1 = { a: 1, b: 2 };
let a2 = { a: 3, c: 4 };
let a3 = { ...a1, ...a2} // {a: 3, b: 2, c: 4}
-
和解构赋值结合生成对象(扩展运算符参数必须在最后一位)
let { a, b, ...z } = { a: 1, b: 2, c: 3, d: 4 };
console.log(a) // 1
console.log(b) // 2
console.log(z) // { c: 3, d: 4 }
-
根据条件添加对象属性
let a = (data) => {
return {
x: 'haha',
y: 'hehe',
...(data ? { z : 'xixi' } : null)
}
}
let m = a(true);
console.log(m); // 输出 { x: "haha", y: "hehe", z: "xixi" }
let n = a(false);
console.log(n); // 输出 { x: "haha", y: "hehe" }