중복되지 않은 개체를 새 배열에 추가하고 싶습니다.
var array = [
{
id: 1,
label: 'one'
},
{
id: 1,
label: 'one'
},
{
id: 2,
label: 'two'
}
];
var uniqueProducts = array.filter(function(elem, i, array) {
return array.indexOf(elem) === i;
});
console.log('uniqueProducts', uniqueProducts);
// output: [object, object, object]
일반적으로 개체를 사용하여 고유 키를 추적합니다. 그런 다음 개체를 모든 속성 값의 배열로 변환합니다.
id
식별자로 사용할 수 있는 고유 한 유사 속성 을 포함하는 것이 가장 좋습니다 . 계정이없는 경우 직접 JSON.stringify
또는 사용자 지정 방법을 사용하여 생성해야합니다 . 객체를 문자열 화하면 단점이 있습니다. 키의 순서가 일관적일 필요는 없습니다.
당신은 할 수 만들 objectsAreEqual
깊은 비교를 지원하는 방법을,하지만이 것 대단히 함수를 느리게.
두 단계로 :
var array=[{id:1,label:"one"},{id:1,label:"one"},{id:2,label:"two"}];
// Create a string representation of your object
function getHash(obj) {
return Object.keys(obj)
.sort() // Keys don't have to be sorted, do it manually here
.map(function(k) {
return k + "_" + obj[k]; // Prefix key name so {a: 1} != {b: 1}
})
.join("_"); // separate key-value-pairs by a _
}
function getHashBetterSolution(obj) {
return obj.id; // Include unique ID in object and use that
};
// When using `getHashBetterSolution`:
// { '1': { id: '1', label: 'one' }, '2': /*etc.*/ }
var uniquesObj = array.reduce(function(res, cur) {
res[getHash(cur)] = cur;
return res;
}, {});
// Convert back to array by looping over all keys
var uniquesArr = Object.keys(uniquesObj).map(function(k) {
return uniquesObj[k];
});
console.log(uniquesArr);
// To show the hashes
console.log(uniquesObj);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다