es6提供了心得資料結構——set。它類似於陣列,但是成員的值都是唯一的,沒有重複。set本身是一種建構函式,用來生成set資料結構。
一、set的基本用法。.
1、通過add向set結構新增資料成員,set不會新增重複的值。可以用來去除陣列的重複元素,例如:new set([1,2,3,3,3])。
const s = new set();
[1,2,3,4,5,6,6].foreach(x => s.add(x));
for(let i of s)
2、set函式接受乙個陣列(或其他具有iterable介面的其他資料結構)作為引數,用來初始化。
//用陣列作為引數
const set = new set([1,2,3,4,4]);
console.log([...set]); //[1,2,3,4]
//用類似於陣列的物件作為引數
function divs()
const set = new set(div());
console.log(set.size); //56
3、向set加入值時不會發生型別轉換,所以5和"5"是兩種不同的值。set內部判斷兩個值是否相同時,使用的演算法是「same-value equality",它類似於(===)。主要區別是nan等於自身,而(===)認為nan不等於自身。
let set = new set();
let a = nan;
let b = nan;
set.add(a);
set.add(b);
console.log(set); //set
向set中新增了兩個nan,但是只輸出了乙個nan,說明在set內部,兩個nan是相等的。
4、兩個物件總是不相等。
let set = new set();
set.add({});
console.log(set.size); //1
set.add({});
console.log(set.size); //2
//由於兩個空物件不是精確值,所以它們被視為兩個值
二、set例項的屬性和方法。
1、set結構的例項有以下屬性。
2、set例項的操作方法(用來運算元據的)。
3、array.from方法可以將set結構轉換為陣列。這就提供了一種去除陣列重複元素的方法。
const items = new set([1,2,3,4,5]);
const array = array.from(items);
三、遍歷操作。
1、set結構的例項的四種遍歷方法。
注意:set的遍歷順序就是插入的順序。
2、keys()、values()、entries()方法返回的都是遍歷器物件,由於set結構沒有鍵名,只有鍵值,所以keys和values方法的行為完全一致。
let set = new set(["red","yellow","green"]);
for(let item of set)
for(let item of set.keys())
for(let item of set.values())
for(let item of set.entries())
3、可以省略values方法,直接使用for....of迴圈遍歷set。
let set = new set(["red",'green','blue']);
for(let x of set)
4、foreach()用於對每個成員執行某種操作,沒有返回值。它有乙個引數,就是乙個處理函式,該處理函式有三個引數,依次是鍵值、鍵名、集合本身。
let set = new set([1,2,3]);
set.foreach((value,key) => console.log(value*2)); //2 4 6
5、遍歷的應用。
(1)擴充套件運算子(...)內部使用for...of迴圈,所以也可以用於set結構。
let set = new set(['red','green','blue']);
let arr = [...set];
console.log(arr); //[ 'red', 'green', 'blue' ]
(2)擴充套件運算子和set結構相結合就可以去除陣列的重複成員。
let arr = [3,5,2,2,5,5];
let unique = [...new set(arr)];
console.log(unique); //[3,5,2]
(3)而且,陣列的map和filter方法也可以用於set。
let set = new set([1,2,3]);
set = new set([...set].map(x => x*2));
console.log(set); //set
let set = new set([1,2,3,4,5]);
set = new set([...set].filter(x => (x%2) == 0));
console.log(set); //set
(4)使用set可以很容易的實現並集(union)、交集(intersect)、差集(different)。
let a = new set([1,2,3]);
let b = new set([4,3,2]);
//並集
let union = new set([...a,...b]);
console.log(union); //set
//交集
let intersect = new set([...a].filter(x => b.has(x)));
console.log(intersect); //set
//差集
let different = new set([...a].filter(x => !b.has(x)));
console.log(different); //set
(5)如果想在遍歷操作中同步改變原來的set結構,目前沒有直接的方法,但有兩種 變通的方法,一種是利用原來的set結構對映出來乙個新的結構,然後賦值給原來的set結構;另一種是利用array.from方法。
let set = new set([1,2,3]);
set = new set([...set].map(val => val * 2));
console.log(set); //set
let set = new set([1,2,3]);
set = new set([array.from(set,val => val * 2)]);
console.log(set); //set
ES6 set資料結構
set 本身是乙個建構函式,用來生成 set 資料結構。let set new set set 函式可以接受乙個陣列作為引數,用來初始化。但是成員中的值都是唯一的。沒有重複的值 let se new set let arr 2,3,4,5,6,2,3,4,5,6 arr.foreach item s...
ES6 Set資料結構
三 增刪改查 es6提供了新的資料結構set。它類似於陣列,但是成員的值都是唯的,沒有重複的值 set本身是乙個建構函式,用來生成set資料結構。set.prototype.size返回 set 物件中的值的個數 const s newset set函式可以接受乙個陣列作為引數,用來初始化 cons...
ES6 資料結構 Set
資料結構 set 集合的基本概念 集合是由一組無序且唯一 即不能重複 的項組成的。這個資料結構使用了與有限集合相同的數學概念,應用在計算機的資料結構中。特點 key 和 value 相同,沒有重複的value es6提供了資料結構set.它類似於陣列,但是成員的值都是唯一的,沒有重複的值。1 如何建...