web-dev-qa-db-ja.com

設定するJavaScript配列

MSDNはJavaScriptの Set コレクションの抽象化を参照します。名前でさまざまな要素を削除(.delete())できるように、セットに変換するオブジェクトの配列があります。

var array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

この配列をセットに変換するにはどうすればよいですか?より具体的には、上記の配列を反復せずにこれを行うことは可能ですか?ドキュメントは比較的不足しています(インスタンス化されたセットには十分ですが、変換ではなく、可能であれば)。

キーによる削除のために Map への変換を考えているかもしれません。私が達成しようとしているのは、(インデックスではなく)キーを介して主に要素にアクセスすることでアクセスまたは変更できる反復可能なコレクションです。

アレイから他のアレイへの変換が最終的な目標です。

82
Thomas

配列をSetコンストラクターに渡すだけです。 Setコンストラクターは、iterableパラメーターを受け入れます。 Arrayオブジェクトはiterableプロトコルを実装しているため、有効なパラメーターです。

var arr = [55, 44, 65];
var set = new Set(arr);
console.log(set.size === arr.length);
console.log(set.has(65));

こちらを参照

126
levi

levisaid コンストラクタに渡すことについては正しいですが、オブジェクトを使用することもできます。

Veverke が言おうとしているのは、オブジェクトで deleteキーワード を簡単に使用して同じ効果を達成できるということです。

用語に混乱していると思います。 properties は、名前付きインデックスとして使用できるオブジェクトのコンポーネントです(そのように考えたい場合)。

次のようなものを試してください:

var obj = {
    "bob": "dole",
    "mr.": "peabody",
    "darkwing": "duck"
};

次に、これを行うことができます:

delete obj["bob"];

オブジェクトの構造は次のようになります。

{
    "mr.": "peabody",
    "darkwing": "duck"
}

同じ効果があります。

3
AstroCB

で始まる場合:

let array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

そして、たとえば名前のセットが必要な場合は、次のようにします。

let namesSet = new Set(array.map(item => item.name));
3

定義により "Setは値のコレクションであり、各値は1回しか出現しません。"反復値がある場合、反復値のうち1つの値のみがセットに追加されます。

var arr = [1, 2, 3];
var set = new Set(arr);
console.log(set); // {1,2,3}


var arr = [1, 2, 1];
var set = new Set(arr);
console.log(set); // {1,2}

したがって、配列に値が繰り返されている場合は、セットに変換しないでください。

0
Ashlesh Sortee