Es6 new collection type
// Set
// es5
var courses = [];
function addCourse(course) {
if(courses.indexOf(course) === -1) {
courses.push(course);
}
}
addCourse("jQuery Basics");
addCourse("Node.js Basics");
addCourse("jQuery Basics");
courses.forEach(value => console.log(value));
// es6
var courses = new Set(["jQuery Basics"]);
courses.add("Node.js Basics");
courses.add("jQuery Basics");
courses.forEach(value => console.log(value));
console.log(courses.size);
console.log(courses.has("java course"));
console.log(courses.has("jQuery Basics"));
console.log(courses.delete("jQuery Basics"));
console.log(courses.size);
console.log(courses.has("jQuery Basics"));
courses.clear();
console.log(courses.size);
for (let key of courses.keys()) console.log(key);
for (let value of courses.values()) console.log(value);
for (let [key, value] of courses.entries()) {
console.log(`${key}: ${value}`);
}
// Map和Set都为内部的每个键或值保持了强引用
// 也就是说,假如你在一个集合内添加了某些dom元素,可能是被选中的checkbox元素
// 如果一个DOM元素被移除了,回收机制无法取回它占用的内存
// ES6给了我们一个惊喜的解决方案:用WeakSet而非Set。和内存泄露说再见吧!
var contacts = new WeakSet();
var andrew = {
name: "Andrew",
email: "andrew@teamtreehouse.com"
}
var dave = {
name: "Dave",
email: "dave@teamtreehouse.com"
}
contacts.add(andrew);
contacts.add(dave);
contacts.add(andrew);
console.log(contacts.has(andrew));
dave = {
name: "Changed",
email: "dave@teamtreehouse.com"
}
console.log(contacts.has(dave));
// Map
var andrew = {
name: "Andrew",
email: "andrew@teamtreehouse.com"
}
var mary = {
name: "Mary",
email: "mary@teamtreehouse.com"
}
var dave = {
name: "Dave",
email: "dave@teamtreehouse.com"
}
var kenneth = {
name: "Kenneth",
email: "kenneth@teamtreehouse.com"
}
var friendships = new Map();
friendships.set(andrew, new Set([mary, dave]));
friendships.set(mary, new Set([andrew, kenneth, dave]));
console.log(friendships.get(mary));
console.log(friendships.get(andrew).has(kenneth));
console.log(friendships.get(andrew).add(kenneth));
console.log(friendships.get(andrew).size);
friendships.delete(andrew);
console.log(friendships.has(andrew));