1. 程式人生 > 其它 >ES6學習筆記 —— Set與Map

ES6學習筆記 —— Set與Map

Set 物件

Set 物件允許你儲存任何型別的唯一值,無論是原始值或者是物件引用。

Set 中的特殊值

Set 物件儲存的值總是唯一的,所以需要判斷兩個值是否恆等。有幾個特殊值需要特殊對待:

  • +0 與 -0 在儲存判斷唯一性的時候是恆等的,所以不重複;
  • undefined 與 undefined 是恆等的,所以不重複;
  • NaN 與 NaN 是不恆等的,但是在 Set 中只能存一個,不重複。

Set宣告

const set = new Set()

Set屬性

  • size:返回 Set 物件中值的數量

Set方法

  • add(value): 在Set物件尾部新增一個元素,返回該Set物件。
  • delete(value): 移除Set的中與這個值相等的元素,有則返回true,無則返回false。
  • clear(): 清楚Set的所有元素。
  • has(value): 是否存在這個值,如果存在為 true,否則為false。
  • keys():返回鍵名的遍歷器。
  • values():返回鍵值的遍歷器。
  • entries():返回鍵值對的遍歷器。
  • forEach():使用回撥函式遍歷每個成員。

 Set方法使用:

	let mySet = new Set()

	//add()
	mySet.add('1')
	mySet.add(1)
	console.log(mySet) // Set(2) {1, "1"}

	//size
	console.log(mySet.size) // 2

	//delete()
	mySet.delete('1')
	console.log(mySet) // Set(1) {1}

	//has()
	console.log(mySet.has(1)) // true
	console.log(mySet.has(2)) // false

	//clear()
	mySet.clear()
	console.log(mySet) // Set(0) {}

	let arr = [{id: 1}, {id: 2}, {id: 3}]
	let mySet1 = new Set(arr)

	// keys()
	for (let key of mySet1.keys()) {
		console.log('key:', key); // key:{id: 1} key:{id: 2} key:{id: 3}
	}

	//values()
	for (let key of mySet1.values()) {
		console.log('values:', key); // values:{id: 1} values:{id: 2} values:{id: 3}
	}

	//entries()
	for (let data of mySet1.entries()) {
		console.log('entries:',	data); // entries:[{id: 1},{id: 1}] entries:[{id: 2},{id: 2}] entries:[{id: 3},{id: 3}]
	}

	//forEach
	mySet1.forEach((item) => {
		console.log('forEach:', item) // forEach:{id: 1} forEach:{id: 2} forEach:{id: 3}
	});

Set物件應用

// 陣列去重
var mySet = new Set([1, 2, 3, 4, 4]);
[...mySet]; // [1, 2, 3, 4]

// 字串去重
[...new Set('ababbc')].join('')  // "abc"

 let a = new Set([1, 2, 3])
 let b = new Set([2, 4, 3])
 
//並集
let union = new Set([...a, ...b]))  // {1, 2, 3, 4}
 
//交集
let intersect  = new Set([...a].filter(x => b.has(x))) // {2, 3}
 
// 差集
// (a 相對於 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x))) // {1}

// 對映
// 方法一
let set = new Set([1, 2, 3]);
set = new Set([...set].map(val => val * 2));
// set的值是2, 4, 6

// 方法二
let set = new Set([1, 2, 3]);
set = new Set(Array.from(set, val => val * 2));
// set的值是2, 4, 6

學習網站地址:http://caibaojian.com/es6/destructuring.html