2017-09-03 2 views
0
var place =[ 
{city: "Durham, NC, United States", begin: "09/04/2017", id: 0}, 
{city: "Raleigh, NC, United States", begin: "09/11/2017", id: 1}, 
{city: "Durham, NC, United States", begin: "09/25/2017", id: 2}, 
{city: "Durham, NC, United States", begin: "09/25/2017", id: 3} 
] 

Aus dem obigen möchte ich ein neues Array erstellen, das Objekte mit nur eindeutigen city/begin-Eigenschaftskombinationen enthält. In Bezug auf das obige Array würde das Ergebnis nur die ersten 3 Objekte umfassen, da die Objekte 3 und 4 die gleichen city/begin-Eigenschaften enthalten.Filtern von Objekten mit einer eindeutigen Kombination von Attributen

Ich habe verschiedene Kombinationen der for/if als auch andere Array-Methoden ohne Erfolg ausprobiert, so dass alle Vorschläge geschätzt werden.

Antwort

0

Hier können Sie eine Karte verwenden. Der Schlüssel in der Karte ist city und der Wert als Array begin. Dann können Sie die Duplikate mithilfe dieser Karte herausfiltern.

var map = new Map; 
var len = place.length; 
var newArr = []; 
for(i = 0; i < len; i++){ 
var obj = place[i]; 
if(map[obj.city] === undefined || map[obj.city] === null){ 
    map[obj.city] = []; 
    map[obj.city].push(obj.begin); 
    newArr.push(obj); 
}else if(!map[obj.city].includes(obj.begin)){ 
    map[obj.city].push(obj.begin); 
    newArr.push(obj); 
} 
} 
+0

Dank - diese Lösung ist perfekt - so kann ich aus dem gefilterten newArr Objekt funktioniert. – mac

0

Eine einfache Lösung, um die Unterstrich-Bibliothek:

var list = [ 
    { city: 'Durham, NC, United States', begin: '09/04/2017', id: 0 }, 
    { city: 'Raleigh, NC, United States', begin: '09/11/2017', id: 1 }, 
    { city: 'Durham, NC, United States', begin: '09/25/2017', id: 2 }, 
    { city: 'Durham, NC, United States', begin: '09/25/2017', id: 3 }, 
]; 

var uniqueList = _.uniq(list, function(v) { 
return v.x && v.y; 
}); 

console.log(uniqueList); 
+0

danke - ich hatte noch nie zuvor von Unterstreichung gehört - – mac

+0

Keine Sorge, es ist aus der Bibliothek von underscore.js oder Sie können die Bibliothek Lodash verwenden. –

0

können Sie array#reduce und array#some verwenden. Sie können den gesamten eindeutigen Wert in einem neuen Objekt speichern und mit ihm überprüfen, ob das neue Objekt eindeutig oder doppelt vorhanden ist.

var places =[{city: "Durham, NC, United States", begin: "09/04/2017", id: 0},{city: "Raleigh, NC, United States", begin: "09/11/2017", id: 1},{city: "Durham, NC, United States", begin: "09/25/2017", id: 2}, {city: "Durham, NC, United States", begin: "09/25/2017", id: 3}]; 
 

 
var uniquePlaces = places.reduce((hash, obj) => { 
 
    let isExist = Object.values(hash).some(v => v.city === obj.city && v.begin === obj.begin); 
 
    return !isExist ? Object.assign(hash, {[obj.id] : obj}) : hash; 
 
}, Object.create(null)); 
 

 
var result = Object.values(uniquePlaces); 
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Verwandte Themen