[javascript] Set을 Array로 변환하는 방법?

Set 은 유일무이 한 방식으로 호출되는 generator [Set] .values를 제외하고는 고유 한 요소로 배열을 생성하는 좋은 방법 인 것 같지만 속성을 얻는 좋은 방법을 노출시키지 않습니다 mySet.values.next().

map세트에서 비슷한 함수를 호출 할 수 있다면 이것은 좋을 것 입니다. 그러나 당신도 그렇게 할 수 없습니다.

시도 Array.from했지만 배열과 같은 (NodeList 및 TypedArrays?) 객체 만 Array로 변환하는 것 같습니다. 또 다른 시도 : Object.keys세트에서는 작동하지 않으며 Set.prototype에는 비슷한 정적 메소드가 없습니다.

그래서 질문 : 주어진 Set의 값으로 배열을 만드는 편리한 내장 메소드가 있습니까? (요소의 순서는 실제로 중요하지 않습니다).

그러한 옵션이 존재하지 않는다면, 그렇게하기위한 좋은 관용적 인 라이너가 있습니까? 같은, 사용 for...of, 또는 유사한?



답변

그러한 옵션이 존재하지 않는다면, 그렇게하기위한 좋은 관용적 인 라이너가 있습니까? for … of 또는 이와 유사한 것을 사용 하는가?

실제로 SetArray 로 변환하는 몇 가지 방법이 있습니다 .

사용 Array.from

let array = Array.from(mySet);

간단히 spreading배열로 설정

let array = [...mySet];

구식 방식으로 반복하고 새로운 배열로 푸시 (Sets have forEach)

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

이전에는 비표준이고 더 이상 사용되지 않는 배열 이해 구문을 사용합니다.

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


답변

https://speakerdeck.com/anguscroll/es6-uncensored 를 통해Angus Croll의 를

spread연산자 를 사용할 수 있습니다 .

var myArr = [...mySet];

또는 다음을 사용하십시오 Array.from.

var myArr = Array.from(mySet);


답변

Set일시적으로 배열에서 고유 값을 가져오고 배열로 다시 변환 한다고 가정하면 다음을 사용하십시오.

_.uniq([])

이것은 밑줄 또는 lo-dash 사용에 의존합니다 .


답변

파티에 늦었을 수도 있지만 다음을 수행 할 수 있습니다.

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

ES6를 지원하는 브라우저에서 또는 위 기능을 올바르게 채우는 shim이있는 경우 문제없이 작동합니다.

편집 : 오늘 @ c69가 제안하는 것을 사용할 수 있습니다.

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


답변

원하는 결과를 얻으려면 스프레드 연산자를 사용하십시오.

var arrayFromSet = [...set];


답변

내 경우에는 해결책은 다음과 같습니다.

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와 같습니다 => 세트의 현재 위치에 포함 된 값입니다. 두 인수 모두에 동일한 값이 전달됩니다.

IE11에서 일했습니다.


답변

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));