web-dev-qa-db-ja.com

SetをArrayに変換する方法

Set は、一意の要素が保証された配列を作成するための良い方法のようですが、mySet.values.next()の扱いにくい方法で呼び出されるgenerator [Set] .valuesを除いて、プロパティを取得するための良い方法を公開しません。

Setでmapや同様の関数を呼び出すことができれば、これは問題ありませんでした。しかし、それはできません。

私はArray.fromを試しましたが、配列のような(NodeListとTypedArrays?)オブジェクトだけをArrayに変換しているようです。もう1つ試してください。Object.keysはSetsでは機能せず、Set.prototypeにも同様の静的メソッドがありません。

だから、質問: 与えられたセットの値を持つ配列を作成するための便利な作り付けの方法はありますか? (要素の順序は重要ではありません)。

そのようなオプションが存在しない場合は、それを実行するためのニース慣用的なワンライナーがあるでしょうか。のように、for...of、または同様の?

384
c69

そのようなオプションが存在しない場合は、それを実行するためのニース慣用的なワンライナーがあるでしょうか。のように、〜のために使用する、または同様の?

確かに、 SetArray に変換する方法はいくつかあります。

using Array.from

let array = Array.from(mySet);

単純に spreading the配列に設定する

let array = [...mySet];

昔ながらのやり方で、繰り返して新しい配列にプッシュする(集合はforEachを持っている)

let array = [];
mySet.forEach(v => array.Push(v));

以前は、非標準の、現在は非推奨の配列内包構文を使用しています。

let array = [v for (v of mySet)];
696
adeneo

経由https://speakerdeck.com/anguscroll/es6-uncensored Angus Crollさんより

結局のところ、spread演算子を使用できます。

var myArr = [...mySet];

あるいは、 Array.from を使用します。

var myArr = Array.from(mySet);
61
c69

一時的にSetを使用して配列内の一意の値を取得してからArrayに戻す場合は、次のようにしてください。

_.uniq([])

これは アンダースコア または lo-dash の使用に依存します。

12
fremn

希望する結果を得るためにspreadオペレータを使用してください

var arrayFromSet = [...set];
4
Vignesh Murugan

パーティーに遅刻するかもしれませんが、あなたはただ以下をすることができました:

const set = new Set(['a', 'b']);
const values = set.values();
const array = Array.from(values);

ES6をサポートしているブラウザや上記の機能を正しく満たすシムがあれば、これは問題なく動作するはずです。

編集 :@ c69が提案しているものを今日でも使用できます。

const set = new Set(['a', 'b']);
const array = [...set]; // or Array.from(set)
3
Roland

私の場合、解決策は次のとおりです。

var testSet = new Set();
var testArray = [];

testSet.add("1");
testSet.add("2");
testSet.add("2"); // duplicate item
testSet.add("3");

var someFunction = function (value1, value2, setItself) {
    testArray.Push(value1);
};

testSet.forEach(someFunction);

console.log("testArray: " + testArray);

value1 = value2 => Set内の現在位置に含まれる値。両方の引数に同じ値が渡されます

IE11の下で働いた。

0
d0wn

Set を使用してそれを配列に変換することは、配列をコピーすることと非常によく似ています...

そのため、 ES6 では非常に簡単な配列のコピーに同じ方法を使用できます。

たとえば、...を使用できます。

このセットが以下にあると想像してください。

const a = new Set(["Alireza", "Dezfoolian", "is", "a", "developer"]);

あなたは単にそれを使ってそれを変換することができます:

const b = [...a];

結果は次のとおりです。

["Alireza", "Dezfoolian", "is", "a", "developer"]

配列と今、あなたは配列に使用できるすべてのメソッドを使用することができます...

その他の一般的な方法は次のとおりです。

const b = Array.from(a);

または次のようなループを使う

const b = [];
a.forEach(v => b.Push(v));
0
Alireza