セットとMapデータ構造
5592 ワード
一、ES 6は新しいデータ構造Setを提供します.配列に似ていますが、メンバーの値は全部唯一で、重複した値はありません.map(巡回巡回巡回配列)と組み合わせることもできます.filter(フィルタ配列)は使用できます.
5.1、対象に類似していて、キーパッドのペアのセットでもあるが、キーの範囲は文字列に限定されず、各種類の値(対象を含む)はキーとして使用することができる.つまり、Object構造は「文字列ー値」の対応を提供し、Map構造は「値ー値」の対応を提供し、より完璧なHash構造の実現である.もしあなたが「キーペア」のデータ構造が必要ならば、MapはObjectよりもっと適しています.
1:
const set = new Set([1, 2, 3, 4, 4]);
console.log( [...set] ) // [1,2,3,4]
2:
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
console.log( items ) // [1,2,3,4,5]
console.log( items.size ) // 5
1.1、配列除去の重複メンバー[...new Set(array)]let arr = [1,2,3,4,4,5,5,7,1,2,3,8]
let a1 = [...new Set(arr)]
console.log( a1 ); //[1,2,3,4,5,7,8]
1.2、Setの2つのオブジェクトはいつも同じではありません.2つの空のオブジェクトは等しくないので、それらは2つの値とみなされます.let set = new Set();
set.add({});
set.size // 1
set.add({});
set.size // 2
二、操作方法(データ操作用)--add(value): , Set 。
--delete(value): , , 。
--has(value): , Set 。
・--clear(): , 。
2.1、Aray.from方法はSet構造を配列に変えることができる.const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);
console.log( items ); // Set { 1, 2, 3, 4, 5 }
console.log( array ); // [ 1, 2, 3, 4, 5 ]
function dedupe(array) {
return Array.from(new Set(array));
};
dedupe([1, 1, 2, 3]) // [1, 2, 3]
三、メンバーを巡回する方法--keys():
--values():
--entries():
・--forEach():
let set = new Set(['red', 'green', 'blue']);
--keys():
for (let item of set.keys()) {
console.log(item); // red green blue
};
--values():
for (let item of set.values()) {
console.log(item); // red green blue
};
--entries():
for (let item of set.entries()) {
console.log(item);
};
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
--forEach();
set = new Set([1, 4, 9]);
set.forEach(
(value, key) => {
console.log(key + ' : ' + value)
}
)
// 1 : 1
// 4 : 4
// 9 : 9
四、mapとfilterの方法はSetに使われます.--map
let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// Set :{2, 4, 6}
--filter
let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0));
// Set :{2, 4}
4.1、セットの統合(ユニオン)、インターリーブ(Intersect)、および差分セット(Difference).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}
五、Map5.1、対象に類似していて、キーパッドのペアのセットでもあるが、キーの範囲は文字列に限定されず、各種類の値(対象を含む)はキーとして使用することができる.つまり、Object構造は「文字列ー値」の対応を提供し、Map構造は「値ー値」の対応を提供し、より完璧なHash構造の実現である.もしあなたが「キーペア」のデータ構造が必要ならば、MapはObjectよりもっと適しています.
const m = new Map();
const o = {p: 'Hello World'};
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false
5.2、同じキーに複数の値を割り当てると、後の値が前の値をカバーします.const map = new Map();
map
.set(1, 'aaa')
.set(1, 'bbb');
map.get(1) // "bbb"
5.3、注意してください.同じオブジェクトに対する参照だけが、Map構造は同じキーと見なされます.この点は非常に注意してください.const map = new Map();
map.set(['a'], 555);
map.get(['a']) // undefined
set get , , , , get , undefined。
const map = new Map();
const k1 = ['a'];
const k2 = ['a'];
map
.set(k1, 111)
.set(k2, 222);
map.get(k1) // 111
map.get(k2) // 222
k1 k2 , Map 。
5.4、実例の属性と操作方法--size(); Map
const map = new Map();
map.set('foo', true);
map.set('bar', false);
map.size // 2
--set(key, value); key value, Map 。
let map = new Map()
.set(1, 'a')
.set(2, 'b')
.set(3, 'c');
// set Map , 。
--get(key) key , key, undefined。
const m = new Map();
const hello = function() {console.log('hello');};
m.set(hello, 'Hello ES6!') //
m.get(hello) // Hello ES6!
--has(key); , Map 。
const m = new Map();
m.set('edition', 6);
m.set(262, 'standard');
m.set(undefined, 'nah');
m.has('edition') // true
m.has('years') // false
m.has(262) // true
m.has(undefined) // true
--delete(key); , true。 , false。
const m = new Map();
m.set(undefined, 'nah');
m.has(undefined) // true
m.delete(undefined)
m.has(undefined) // false
--clear(); , 。
let map = new Map();
map.set('foo', true);
map.set('bar', false);
map.size // 2
map.clear()
map.size // 0
5.5、エルゴード方法--keys(): 。
--values(): 。
--entries(): 。
・--forEach(): Map 。
5.6、Map構造を配列構造に変換し、比較的速い方法は拡張演算子(…)を使用することである.const map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three']
]);
[...map.keys()] // [1, 2, 3]
[...map.values()] // ['one', 'two', 'three']
[...map.entries()] // [[1,'one'], [2, 'two'], [3, 'three']]
[...map] // [[1,'one'], [2, 'two'], [3, 'three']]