rrylee
12/4/2015 - 3:29 PM

Es6 new collection type

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));