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으로 변환하지 마십시오.