var set = new Set([1, 2, 3, 4, 4]);
[...set]? ? ?// [1, 2, 3, 4]
var s = new Set();
[2, 3, 5, 4, 5, 2, 2].map(x => s.add(x));
for (let i of s) { console.log(i);}? ? ? ? ? ? // 2 3 5 4
Set 數(shù)據(jù)結(jié)構(gòu):::::它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值等太。
四個操作方法:
set.add(value):添加某個值,返回Set結(jié)構(gòu)本身汗捡。
set.delete(value):刪除某個值,返回一個布爾值畏纲,表示刪除是否成功。
set.has(value):返回一個布爾值春缕,表示該值是否為Set的成員盗胀。
set.clear():清除所有成員,沒有返回值
Map結(jié)構(gòu):::::提供了“值—值”的對應(yīng)锄贼,是一種更完善的Hash結(jié)構(gòu)實現(xiàn)票灰。如果你需要“鍵值對”的數(shù)據(jù)結(jié)構(gòu),Map比Object更合適。它類似于對象屑迂,也是鍵值對的集合浸策,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當(dāng)作鍵惹盼。
var m = new Map();
var o = {p: "Hello World"};
m.set(o, "content")
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false
實例屬性和方法:size庸汗、set、get手报、has蚯舱、delete、clear
遍歷方法:keys()掩蛤、values()枉昏、entries()、forEach()
Object.assign(target, ...sources)??
target目標(biāo)對象揍鸟。sources源對象
如果目標(biāo)對象中的屬性具有相同的鍵兄裂,則屬性將被源中的屬性覆蓋。后來的源的屬性將類似地覆蓋早先的屬性阳藻。
const object1 = {
? a: 1,b: 2,c: 3
};
const ob = Object.assign({c: 4, d: 5}, object1);
console.log(ob)
Object { c: 3, d: 5, a: 1, b: 2 }
復(fù)制一個對象
var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
針對深拷貝晰奖,需要使用其他方法,因為?Object.assign()拷貝的是屬性值稚配。假如源對象的屬性值是一個指向?qū)ο蟮囊贸┩浚仓豢截惸莻€引用值。
function test() {
? 'use strict';
? let obj1 = { a: 0 , b: { c: 0}};
? let obj2 = Object.assign({}, obj1);
? console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
? obj1.a = 1;
? console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
? console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
? obj2.a = 2;
? console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
? console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
? obj2.b.c = 3;
? console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
? console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
? // Deep Clone
? obj1 = { a: 0 , b: { c: 0}};
? let obj3 = JSON.parse(JSON.stringify(obj1));
? obj1.a = 4;
? obj1.b.c = 4;
? console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
}