Set Map的區別,摘自git

2021-09-25 04:20:16 字數 3274 閱讀 9339

set 和 map 主要的應用場景在於資料重組資料儲存

set 是一種叫做集合的資料結構,map 是一種叫做字典的資料結構

es6 新增的一種新的資料結構,類似於陣列,但成員是唯一且無序的,沒有重複的值

set 本身是一種建構函式,用來生成 set 資料結構。

const s = new set()

[1, 2, 3, 4, 3, 2, 1].foreach(x => s.add(x))

for (let i of s)

// 去重陣列的重複物件

let arr = [1, 2, 3, 2, 1, 1]

[... new set(arr)] // [1, 2, 3]

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

向 set 加入值的時候,不會發生型別轉換,所以5和"5"是兩個不同的值。set 內部判斷兩個值是否不同,使用的演算法叫做「same-value-zero equality」,它類似於精確相等運算子(===),主要的區別是nan等於自身,而精確相等運算子認為nan不等於自身。

let set = new set();

let a = nan;

let b = nan;

set.add(a);

set.add(b);

set // set

let set1 = new set()

set1.add(5)

set1.add('5')

console.log([...set1]) // [5, "5"]

let set = new set([1, 2, 3, 2, 1])

console.log(set.length) // undefined

console.log(set.size) // 3

set 很容易實現交集(intersect)、並集(union)、差集(difference)

let set1 = new set([1, 2, 3])

let set2 = new set([4, 3, 2])

let intersect = new set([...set1].filter(value => set2.has(value)))

let union = new set([...set1, ...set2])

let difference = new set([...set1].filter(value => !set2.has(value)))

console.log(intersect) // set

console.log(union) // set

console.log(difference) // set

集合 與 字典 的區別:

const m = new map()

const o =

m.set(o, 'content')

m.get(o) // content

m.has(o) // true

m.delete(o) // true

m.has(o) // false

任何具有 iterator 介面、且每個成員都是乙個雙元素的陣列的資料結構都可以當作map建構函式的引數,例如:

const set = new set([

['foo', 1],

['bar', 2]

]);const m1 = new map(set);

m1.get('foo') // 1

const m2 = new map([['baz', 3]]);

const m3 = new map(m2);

m3.get('baz') // 3

如果讀取乙個未知的鍵,則返回undefined

new map().get('asfddfsasadf')

// undefined

注意,只有對同乙個物件的引用,map 結構才將其視為同乙個鍵。這一點要非常小心。

const map = new map();

map.set(['a'], 555);

map.get(['a']) // undefined

上面**的set和get方法,表面是針對同乙個鍵,但實際上這是兩個值,記憶體位址是不一樣的,因此get方法無法讀取該鍵,返回undefined。

由上可知,map 的鍵實際上是跟記憶體位址繫結的,只要記憶體位址不一樣,就視為兩個鍵。這就解決了同名屬性碰撞(clash)的問題,我們擴充套件別人的庫的時候,如果使用物件作為鍵名,就不用擔心自己的屬性與原作者的屬性同名。

如果 map 的鍵是乙個簡單型別的值(數字、字串、布林值),則只要兩個值嚴格相等,map 將其視為乙個鍵,比如0和-0就是乙個鍵,布林值true和字串true則是兩個不同的鍵。另外,undefined和null也是兩個不同的鍵。雖然nan不嚴格相等於自身,但 map 將其視為同乙個鍵。

let map = new map();

map.set(-0, 123);

map.get(+0) // 123

map.set(true, 1);

map.set('true', 2);

map.get(true) // 1

map.set(undefined, 3);

map.set(null, 4);

map.get(undefined) // 3

map.set(nan, 123);

map.get(nan) // 123

map 的屬性及方法

屬性:

const map = new map([

['name', 'an'],

['des', 'js']

]);map.size // 2

操作方法:

const map = new map([

['name', 'an'],

['des', 'js']

]);console.log(map.entries()) // mapiterator

console.log(map.keys()) // mapiterator

前端 js中 set, map區別

set 物件類似於陣列,且成員的值都是唯一的。const arr 1,2,3,4,5,5,4,3,2,1 const set new set arr.foreach item set.add item console.log set 1,2,3,4,5 陣列快速去重 console.log new ...

Java中Set Map和List的區別

在寫專案的時候遇到了去重,用到了set集合的hashset,查閱了資料 2.list 列表 特徵主要是元素以線性方式儲存,可以存放重複物件。檢索list集合中所有元素的方法 由index指定索引位置下標0開始 1 for迴圈和get 方法 for int i 0 ilist 保證維護元素特定的順序。...

前端中的set, map

set es6提供了新的資料結構set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值。set函式可以接受乙個陣列 或類似陣列的物件 作為引數,用來初始化。const arr 1,2,3,4,5,5,4,3,2,1 const set new set arr.foreach item set.a...