ES6 データ構造の設定とマップ

データ構造の設定

配列に似ていますが、メンバーの値はすべて一意であり、重複する値はありません。

const mySet = new Set([1,2,1,2,1,2])
[...mySet] // [1,2]
mySet.size  // 2  数据结构的长度,没有length属性

Set は、データ重複排除の方法として理解できます。

セットインスタンスのプロパティとメソッド

  • Set.prototype.constructor: コンストラクター、デフォルトは Set 関数です。
  • Set.prototype.size: Set インスタンスのメンバーの合計数を返します。
  • Set.prototype.add(value): 値を追加し、Set 構造体自体を返します。
  • Set.prototype.delete(value): 値を削除し、削除が成功したかどうかを示すブール値を返します。
  • Set.prototype.has(value): 値が Set のメンバーであるかどうかを示すブール値を返します。
  • Set.prototype.clear(): すべてのメンバーをクリアします。戻り値はありません。
mySet.add(3).add(4).add(2); 
[...mySet] // [1,2,3,4]
mySet.size // 4

mySet.has(1) // true
mySet.has(5) // false

mySet.delete(2,3);
[...mySet] // [1,4]

Array.from メソッドは Set 構造体を配列に変換できます。

const myArr = Array.from(mySet); // [1,4]

配列を重複排除するメソッドをカプセル化する

function dedupe(arr){
    
    
  return Array.from(new Set(array));
}
dedupe([1,1,1,2,2,3]) // [1,2,3]

Set 構造のインスタンスには、メンバーを走査するために使用できる 4 つの走査メソッドがあります。

  • Set.prototype.keys(): キー名のトラバーサーを返します。
  • Set.prototype.values(): キー値のトラバーサーを返します。
  • Set.prototype.entries(): キーと値のペアのトラバーサーを返します。
  • Set.prototype.forEach(): コールバック関数を使用して各メンバーを走査します

キー()、値()、エントリ()

let set = new Set ([4,3,9,6]);

for(let item of set.keys()){
    
    
  console.log(item);
}
// 4, 3, 9, 6

for(let item of set.values()){
    
    
  console.log(item)
}
// 4, 3, 9, 6

for(let item of set.entries()){
    
    
  console.log(item);
}
//[4,4] [3,3] [9,9] [6,6]

forEach() 、 map() 、 filter()
forEach() は各メンバーに対して何らかの操作を実行し、戻り値はありません。

set.forEach((val,key)=>{
    
    console.log(key + ':' + val)});
// 4 : 4, 3 : 3, 9 : 9, 6 : 6

配列のmapメソッドやfilterメソッドも間接的にSetに利用でき、データの和集合、積集合、差分を簡単に実現できます。

let x = new Set ([2, 3, 4]);
let y = new Set ([4, 3, 1]);

let union = new Set([...x,...y]);
[...union]  // [2, 3, 4, 1] 并集

let intersect = new Set([...x].filter(el => y.has(el)));
[...intersect] // [3, 4] 交集

let difference = new Set([...x].filter(el => !y.has(el)));
[...difference] // [2, 1] 差集

地図データ構造

オブジェクトと似ていますが、「キー」の範囲は文字列に限定されません。

let myMap = new Map();
let obj = {
    
    val : 'good'};
let arr = [1, 2, 3];

set() get() has() delete() clear() サイズ

myMap.set(obj,'hello').set(arr,'world');
myMap.get(obj); // 'hello'
myMap.delete(obj) // true
myMap.has(obj) // false

myMap.size // 1
myMap.clear()
myMap.size // 0

Map 構造は、3 つのトラバーサー ジェネレーター関数と 1 つのトラバース メソッドをネイティブに提供します。

  • Map.prototype.keys(): キー名のトラバーサを返します。
  • Map.prototype.values(): キー値のイテレータを返します。
  • Map.prototype.entries(): すべてのメンバーのトラバーサを返します。
  • Map.prototype.forEach(): Map のすべてのメンバーを走査します。
let map = new Map([
  ['ADC', 'Uzi'],
  ['MID', 'Knight'],
  ['TOP', 'The Shy']
]);

for(let key of map.keys()){
    
    
 	console.log(key);
}
// 'ADC', 'MID', 'TOP'

for(let value of map.values()){
    
    
  console.log(value);
}
// 'Uzi', 'Knight', 'The Shy'

for(let item of map.entries()){
    
    
  console.log(item[0],item[1])
}
//  'ADC' : 'Uzi', 'MID' : 'Knight', 'TOP' : 'The Shy'

// 等同于使用 map.entries()
for(let [key,value] of map){
    
    
  console.log(key,value);
}

配列のmapメソッドやfilterメソッドと組み合わせることで、Mapのトラバーサルやフィルタリングを実現できます(Setでmapやfilterを使用するのと同様)

他のデータ構造を使用して
配列を Map に変換する

let map = new Map([
  ['ADC', 'Uzi'],
  ['MID', 'Knight'],
  ['TOP', 'The Shy']
]);

配列へのマップ

スプレッド演算子 (…) を使用します。

[...map] 
// [ ['ADC', 'Uzi'], ['MID', 'Knight'], ['TOP', 'The Shy'] ]

オブジェクトにマップする

function strMapToObject(value){
    
    
  let obj = Object.create(null);
  for(let [key,val] of value){
    
    
    obj[key] = val;
  }
  return obj;
}
strMapToObject(map);
// { ADC: 'Uzi', MID: 'Knight', TOP: 'The Shy' }

マップするオブジェクト

Object.entries() はオブジェクトを反復処理します

let obj = {
    
    x: 1, y: 2};
let toMap = new Map(Object.entries(obj));

// 或者是
function objectToMap(value){
    
    
  let toMap = new Map();
  for (let key of Object.keys(value)){
    
    
    toMap.set(k,obj[k]);
  }
  return toMap;
}
objectToMap(obj); // Map{"x": 1, "y": 2}

JSONへのマッピング

function mapToJson(value){
    
    
	return JSON.stringify([...value]);
}
let json = mapToJson(map); // {"ADC": "Uzi", "MID": "Knight", "TOP": "The Shy"}

JSON をマップに変換

function jsonToMap(json){
    
    
  return objectToMap(JSON.parse(value));
}
jsonToMap(); // Map {'ADC' => "Uzi", 'MID' => "Knight", 'TOP' => "The Shy"}

おすすめ

転載: blog.csdn.net/m0_44973790/article/details/128837799