一.Set結構
Set結構是類似於數組結構,但是成員都是不重複的值(判斷不重複類似Object.is()方法,但是+0和-0又是相同的處理,Object.is(+0,-0); // false)
缺點是沒辦法像數組一樣通過下標取值的方法.
WeekSet結構和Set相似,但是成員只能是對象,且對象是弱引用(成員中的對象不存在了,在本結構中也就不存在了),重點是沒有size屬性,沒有遍歷接口
1.構造
任何具有Iterator接口的數據結構都能作爲new Set的參數
let set = new Set([1,2,3]);
set.size // 3
2.屬性和方法
(1)屬性
Set.prototype.constructor 構造函數,就是set本身
Set.prototype.size set的成員總數
(2)操作方法
- add(value) 添加值,返回添加後set本身
- delete(value) 刪除某個值,返回Boolean,是否刪除成功
- has(value) 是否含有某一個值,返回Boolean,是否有這個值
- clear() 請求所有成員,void
s.add(1).add(2).add(2);
// 注意2被加入了兩次
s.size // 2
s.has(1) // true
s.has(2) // true
s.has(3) // false
s.delete(2); // true
s.has(2) // false
(3)遍歷方法
- keys() 返回鍵名的遍歷器
- values() 返回鍵值的遍歷器
- entries() 返回鍵值對的遍歷器
- forEach() 使用回掉函數遍歷每一個set成員
let set = new Set(['red', 'green', 'blue']);
for (let item of set.keys()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.entries()) {
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
set2 = new Set([1, 4, 9]);
set2.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 4 : 4
// 9 : 9
3.應用
(1)數組去重
let arr = [1,2,3,4,5,4,23,1,3];
arr= Array.from(new Set(arr)); // [1, 2, 3, 4, 5, 23]
(2)擴展運算符解構set
let arr = [1,2,3,4,5,4,23,1,3];
let set = new Set(arr);
let arr4 = [...set]; // [1, 2, 3, 4, 5, 23]
(3)set實現交集,並集,差集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 並集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
二.Map結構
Map結構是鍵值對集合(Hash結構).Map可以使用對象作爲鍵名.map內部的鍵名的重複檢測和Set相同
WeekMap結構類似Map,區別是鍵名只能是對象,且對象是弱引用,類似於WeekSet的弱引用
1.構造
任何具有Iterator接口的數據結構都能被Map構造爲Map結構,但是結構要有一定的定製,類似於下方的數組的結構
const map = new Map([
['name', '張三'],
['title', 'Author']
]);
map.size // 2
map.has('name') // true
map.get('name') // "張三"
map.has('title') // true
map.get('title') // "Author"
2.屬性和方法
(1)屬性
Map.prototype.size Map的成員數量
(2)操作方法
- set(key,value) 向map設置一個值,已有鍵名的會被覆蓋,否則會新建,返回設置後的map
- get(key) 讀取key對應的鍵值,沒有則返回undefined
- has(key) 查找map中有沒有某個鍵名,返回Boolean
- clear() 清楚所有成員,void
(3)遍歷方法
和Set擁有同樣的遍歷方法
const map = new Map([
['F', 'no'],
['T', 'yes'],
]);
for (let key of map.keys()) {
console.log(key);
}
// "F"
// "T"
for (let value of map.values()) {
console.log(value);
}
// "no"
// "yes"
for (let item of map.entries()) {
console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"
// 或者
for (let [key, value] of map.entries()) {
console.log(key, value);
}
// "F" "no"
// "T" "yes"
// 等同於使用map.entries()
for (let [key, value] of map) {
console.log(key, value);
}
// "F" "no"
// "T" "yes"
map.forEach(function(value, key, map) {
console.log("Key: %s, Value: %s", key, value);
});
3.應用
暫無