Javscript/ES6的数组、Map和Set
数组在JS6/ES2015中主要提供了数组解构函数,能够让我们分配数组中多个值到数组的多个变量:
let users = ["sam", "tom", "peter"];
let [a, b, c] = users
console.log(a, b, c)
// logs 'sam tom peter'
空格是作为忽略该元素使用,能作为函数返回数组时使用。
再看下面数组解构代码:
function foo() { return [1,2,3]; }
let arr = foo(); // [1,2,3]
let [a, b, c] = foo();
console.log(a, b, c); // 1 2 3
function bar() { return { x: 4, y: 5, z: 6 }; }
let {x: x, y: y, z: z} = bar();
console.log(x, y, z); // 4 5 6
下面看看对数组的for循环,For是从数组中直接读取每个元素,然后分配给变量:
let users = ["sam", "tom", "peter"];
for (let user of users) {
console.log(user); // 打印输出 sam tom peter
}
再看看Array.Find,返回数组中满足查询条件的第一个元素:
let userAdmin = userArray.find( (user) => {
return user.admin; // 返回满足user.admin是真的第一个对象
});
Map是一种由key/value组成的集合,寻常简单数据有利,相比以前使用对象实现key/value功能,Map提供了数据遍历等更强大的数据处理函数。
let user = { name: "Sam" };
let replies = new Map();
replies.set(user, 5);
replies.get(user); // returns 5
另外还有WeakMap,在WeakMap中,原始数据类型String字符串 number数字和boolean是不允许的,WeakMaps是不能遍历的,不能用于循环,对于节省内存比较好。
数组并不强迫元素的唯一性,重复元素是可以的,但是Set是强调唯一性,Set也是可以被遍历的,能够使用for循环和解构。WeakSet是有内存效率的,节省内存,但是不能用于循环,因为没有办法从中读取值。WeakSet适合不可变对象。