[javascript] 설정할 JavaScript 배열

MSDN은 JavaScript의 Set 컬렉션 추상화를 참조 합니다. .delete()이름으로 다양한 요소 를 제거 할 수 있도록 세트로 변환하고 싶은 객체 배열이 있습니다 .

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

이 배열을 세트로 어떻게 변환합니까? 더 구체적으로, 위의 배열을 반복하지 않고이 작업을 수행 할 수 있습니까? 문서가 상대적으로 부족합니다 (인스턴스화 된 세트에는 충분하지만 변환에는 적합하지 않은 경우).

키로 제거 하기 위해 Map 으로의 변환을 생각할 수도 있습니다 . 내가 달성하려는 것은 주로 색인을 사용하지 않고 키를 통해 요소에 액세스하여 액세스하거나 수정할 수있는 반복 가능한 컬렉션입니다.

배열에서 다른 배열로 변환하는 것이 궁극적 인 목표입니다.



답변

배열을 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));

여기를 보아라


답변

당신이 시작한다면 :

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


답변

어떤 레위 말했다 생성자로 전달에 대해 올바른지,하지만 당신은 또한 객체를 사용할 수 있습니다.

나는 무엇을 생각 Veverke가 말하려고하는 것은 쉽게 사용할 수 있다는 것입니다 delete키워드를 동일한 효과를 달성하기 위해 객체에.

나는 당신이 용어에 의해 혼란스러워 생각합니다; 속성 은 명명 된 인덱스로 사용할 수있는 개체의 구성 요소입니다 (그러한 방식으로 생각하려는 경우).

다음과 같이 해보십시오 :

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

그런 다음이 작업을 수행 할 수 있습니다.

delete obj["bob"];

그러면 객체의 구조는 다음과 같습니다.

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

같은 효과가 있습니다.


답변

정의 “세트는 각 값이 한 번만 발생할 수있는 값 모음입니다.” 따라서 배열에 반복되는 값이 있으면 반복 된 값 중 하나의 값만 세트에 추가됩니다.

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}

따라서 배열에 반복되는 값이 있으면 set으로 변환하지 마십시오.


답변