マッピングとセット
28530 ワード
📢 22/03/13復習
📚 Reference
https://ko.javascript.info/map-set
注意:これは個人がサイトで復習しやすいように再編成された文章です.
詳細については、リファレンスサイトにアクセスしてください.
地図
マッピング(
概要図には、次の主な方法と基本情報が含まれています.
🔥
値が
🔥 [マッピング](Mapping)キーを使用してオブジェクトを許可します.
オブジェクト上でオブジェクトキーを使用します.
🔥 マップキーの比較方法
マッピングは、
このアルゴリズムは変更またはカスタマイズできません.
🔥 チェニン
マッピング内の各要素について、次の3つの方法で繰り返し操作できます.
マッピングは、値を挿入する順序でソートされます.これは、オブジェクトがPropertyを覚えていない順序とは異なります.
さらに、マップは、タイリングと同様の埋め込み方法
各要素がキー値ペアの配列であるか、初期化に使用できる小さなオブジェクトをマッピングに渡すことで、新しいマッピングを作成できます.
Object.fromEntryys:マッピングをオブジェクトに置き換える
次に、この反対のマッピングをオブジェクトに置き換える方法を見てみましょう.
マッピングには、サードパーティ製コードからオブジェクトとしてデータを受信する場合に使用できるデータが格納されます.
また、表示される行を
三.
三(
主な方法は次のとおりです.
3つの内に同じ値(
アクセス者アクセスレコードを作成すると仮定します.1人のアクセス者が複数回アクセスしても、アクセス者を繰り返し記録しないことにします.つまり、1人の訪問者は「1回だけ記録」しなければならない.
正しいデータ構造は3つです.
グループ内の値の操作を繰り返す
3つの値は、
これは,マッピングとの互換性のためである.地図上の
グループには、マッピングと同じ繰り返し操作方法もあります.
📚 Reference
https://ko.javascript.info/map-set
注意:これは個人がサイトで復習しやすいように再編成された文章です.
詳細については、リファレンスサイトにアクセスしてください.
地図
マッピング(
Map
)は、鍵付きデータを格納するため、オブジェクトと同様である.ただ.💥 異なる点は、マッピングがキー上で異なるデータ型を使用できることです.概要図には、次の主な方法と基本情報が含まれています.
new Map()
マッピングを作成します.map.set(key, value)
key
を使用してvalue
を格納します.map.get(key)
は、値key
を返します.key
が存在しない場合は、undefined
を返します.map.has(key)
key
が存在する場合、true
を返し、存在しない場合、false
を返します.map.delete(key)
値key
を削除します.map.clear()
概要図のすべての要素を削除します.map.size
要素の数を返します.let map = new Map();
map.set("1", "str1"); // 문자형 키
map.set(1, "num1"); // 숫자형 키
map.set(true, "bool1"); // 불린형 키
// 객체는 키를 문자형으로 변환한다는 걸 기억하고 계신가요?
// 맵은 키의 타입을 변환시키지 않고 그대로 유지합니다. 따라서 아래의 코드는 출력되는 값이 다릅니다.
alert( map.get(1) ); // "num1"
alert( map.get("1") ); // "str1"
alert( map.size ); // 3
💥 オブジェクトとは異なり、マッピングではキーは文字に変換されません.鍵にはデータ制限はありません.🔥
map[key]
はMap
を使用する正しい方法ではありません.値が
map[key] = 2
に設定されているように、map[key]
を使用できます.ただし、この方法は、map
を通常のオブジェクトと見なします.だから制限がたくさんありますmap
を使用する場合は、専用の方法map
、set
等を使用しなければならない.🔥 [マッピング](Mapping)キーを使用してオブジェクトを許可します.
let john = { name: "John" };
// 고객의 가게 방문 횟수를 세본다고 가정해 봅시다.
let visitsCountMap = new Map();
// john을 맵의 키로 사용하겠습니다.
visitsCountMap.set(john, 123);
alert( visitsCountMap.get(john) ); // 123
💥 オブジェクトをキーとして使用できることは、マッピングの最も重要な機能の1つです.文字列キーはオブジェクトに使用できます.ただし、オブジェクトキーは使用できません.オブジェクト上でオブジェクトキーを使用します.
let john = { name: "John" };
let visitsCountObj = {}; // 객체를 하나 만듭니다.
visitsCountObj[john] = 123; // 객체(john)를 키로 해서 객체에 값(123)을 저장해봅시다.
// 원하는 값(123)을 얻으려면 아래와 같이 키가 들어갈 자리에 `object Object`를 써줘야합니다.
alert( visitsCountObj["[object Object]"] ); // 123
get
はオブジェクトであるため、すべてのキーが文字に変換されます.この過程で、visitsCountObj
は文字形式に変換され、john
となる.🔥 マップキーの比較方法
マッピングは、
"[object Object]"
と呼ばれるアルゴリズムを使用して、値が等しいかどうかを決定する.このアルゴリズムは、一致演算子SameValueZero
と非常に似ていますが、同じ===
およびNaN
を処理する場合、一致演算子とは異なります.したがって、地図上ではNaN
度キーを使用することができる.このアルゴリズムは変更またはカスタマイズできません.
🔥 チェニン
NaN
が呼び出されるたびに、マッピング自体が返されます.これにより、map.set
を「リンク」できます.map.set("1", "str1")
.set(1, "num1")
.set(true, "bool1");
マッピング内の要素の操作を繰り返すマッピング内の各要素について、次の3つの方法で繰り返し操作できます.
map.set
繰り返し可能(iterable、かわいい)オブジェクトを返します.各要素にキーがあります.map.keys()
各要素の値を収集する小さなかわいいオブジェクトを返します.map.values()
要素map.entries()
をペアとする一対の小さなかわいいオブジェクトを返します.この拡張可能なオブジェクトは、[키, 값]
反復文の基礎として使用されます.let recipeMap = new Map([
["cucumber", 500],
["tomatoes", 350],
["onion", 50]
]);
// 키(vegetable)를 대상으로 순회합니다.
for (let vegetable of recipeMap.keys()) {
alert(vegetable); // cucumber, tomatoes, onion
}
// 값(amount)을 대상으로 순회합니다.
for (let amount of recipeMap.values()) {
alert(amount); // 500, 350, 50
}
// [키, 값] 쌍을 대상으로 순회합니다.
for (let entry of recipeMap) { // recipeMap.entries()와 동일합니다.
alert(entry); // cucumber,500 ...
}
🔥 マッピングは挿入順序を覚えます.マッピングは、値を挿入する順序でソートされます.これは、オブジェクトがPropertyを覚えていない順序とは異なります.
さらに、マップは、タイリングと同様の埋め込み方法
for..of
もサポートする.// 각 (키, 값) 쌍을 대상으로 함수를 실행
recipeMap.forEach( (value, key, map) => {
alert(`${key}: ${value}`); // cucumber: 500 ...
});
Object.entries:オブジェクトをマッピングに置き換える各要素がキー値ペアの配列であるか、初期化に使用できる小さなオブジェクトをマッピングに渡すことで、新しいマッピングを作成できます.
// 각 요소가 [키, 값] 쌍인 배열
let map = new Map([
["1", "str1"],
[1, "num1"],
[true, "bool1"]
]);
alert( map.get("1") ); // str1
通常のオブジェクトを使用してマッピングを作成する場合は、組み込みメソッドforEach
を使用する必要があります.このメソッドは、オブジェクトのキー値ペアが要素(Object.entries(obj)
)である配列を返します.let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj));
alert( map.get("name") ); // John
[key, value]
を使用してオブジェクトObject.entries
をタイルobj
に変換し、このタイルを使用して新しいマップを作成しようとします.Object.fromEntryys:マッピングをオブジェクトに置き換える
[ ["name","John"], ["age", 30] ]
を使用して一般オブジェクトを概略図に変換する方法について説明した.次に、この反対のマッピングをオブジェクトに置き換える方法を見てみましょう.
Object.entries(obj)
を使用できます.この方法では、各要素がObject.fromEntries
対の配列をオブジェクトに置き換えます.let prices = Object.fromEntries([
["banana", 1],
["orange", 2],
["meat", 4]
]);
// now prices = { banana: 1, orange: 2, meat: 4 }
alert(prices.orange); // 2
[키, 값]
を使用して地図をオブジェクトに変換します.マッピングには、サードパーティ製コードからオブジェクトとしてデータを受信する場合に使用できるデータが格納されます.
let map = new Map();
map.set("banana", 1);
map.set("orange", 2);
map.set("meat", 4);
let obj = Object.fromEntries(map.entries()); // 맵을 일반 객체로 변환 (*)
// 맵이 객체가 되었습니다!
// obj = { banana: 1, orange: 2, meat: 4 }
alert(obj.orange); // 2
呼び出しObject.fromEntries
は、マッピングされたmap.entries()
を要素とする小さな可愛さを返す.[키, 값]
の適切な形態を使用するために.また、表示される行を
Object.fromEntries
に短縮することもできます.let obj = Object.fromEntries(map); // .entries()를 생략함
(*)
は、壊れやすいオブジェクトを受信するので、短縮されたコードは、以前のコードの動作と同じである.必ずしも案を伝える必要はない.一方、Object.fromEntries
における通常の繰り返し返されるキー値の対は、map
を用いた場合と同じである.したがって、map.entries()
と同じキー値を持つ通常のオブジェクトが得られます.三.
三(
map
)💥 値を繰り返す特殊な集合は許可されません.鍵を持たない値がグループに格納されます.主な方法は次のとおりです.
Set
3つ作成します.転送可能な小さなオブジェクト(通常は配列)が受信されると、その値がコピーされ、配列に格納されます.new Set(iterable)
値を追加し、セット自体を返します.set.add(value)
値を削除します.呼び出しポイントリソースに値があるため削除に成功した場合は、set.delete(value)
またはtrue
を返します.false
値がグループ内にある場合は、set.has(value)
またはtrue
を返します.false
3つ空ける.set.clear()
グループに何個の値があるかを数えます.3つの内に同じ値(
set.size
)がある場合、value
が何度呼び出されても反応しません.これが3つの値が重複していない理由です.アクセス者アクセスレコードを作成すると仮定します.1人のアクセス者が複数回アクセスしても、アクセス者を繰り返し記録しないことにします.つまり、1人の訪問者は「1回だけ記録」しなければならない.
正しいデータ構造は3つです.
let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
// 어떤 고객(john, mary)은 여러 번 방문할 수 있습니다.
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(mary);
// 셋에는 유일무이한 값만 저장됩니다.
alert( set.size ); // 3
for (let user of set) {
alert(user.name); // // John, Pete, Mary 순으로 출력됩니다.
}
配列ではなく配列を使用してアクセス者情報を格納した後、配列メソッドset.add(value)
を使用して重複値があるかどうかを確認することもできます.しかし、arr.find
は、アレイ全体にわたって重複値を検索するため、3つのアレイに比べて性能が劣る.一方、3つは、値の一意性を決定するために最適化される.グループ内の値の操作を繰り返す
3つの値は、
arr.find
またはfor..of
を使用して反復することができる.let set = new Set(["oranges", "apples", "bananas"]);
for (let value of set) alert(value);
// forEach를 사용해도 동일하게 동작합니다.
set.forEach((value, valueAgain, set) => {
alert(value);
});
面白いところが目立つ.forEach
に使用されるコールバック関数は、3つのパラメータを受信し、1つ目は値であり、2つ目も同じ値:forEach
である.3つ目はターゲットオブジェクト(3つ)です.同じ値が引数に2回表示されます.これは,マッピングとの互換性のためである.地図上の
valueAgain
に書かれたコールバックを3つの買収を得るために.変に見えますが、このように実現されているので、地図を3つか3つに置き換えやすいです.グループには、マッピングと同じ繰り返し操作方法もあります.
forEach
コレクション内のすべての値を含む小さなオブジェクトを返します.set.keys()
set.values()
と同じです.マッピングと互換性を持つ方法.set.keys
セット内の各値を使用して作成されたset.entries()
配列を含む小さなオブジェクトを返します.マップとの互換性を作成します.Reference
この問題について(マッピングとセット), 我々は、より多くの情報をここで見つけました https://velog.io/@gusdnr814/맵과-셋テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol