2016-07-21 5 views
-1

ich vom Server wie dieser willWie nur einzigartiges Objekt in einem Array von Objekten halten mit Hilfe von Javascript

{ 
    owners:[ 
    { 
    _id:"33333" 
    email:[email protected] 
    } 
    { 
    _id:"1111" 
    email:[email protected] 
    }] 
    employee:[ 
    { 
    _id:"44342" 
    email:[email protected] 
    } 
    { 
    _id:"35345" 
    email:[email protected] 
    } 
    { 
    _id:"3556" 
    email:[email protected] 
    } 
    ] 
    users:[ 
    { 
    _id:"56744" 
    email:[email protected] 
    } 
    { 
    _id:"8908" 
    email:[email protected] 
    }] 
} 

die Antwort erhalte ich die Objekte halten, die nur einmalige E-Mail id in alle haben die Array von Objekten das Ergebnis sollte so sein:

{ 
    owners:[ 
    { 
    _id:"33333" 
    email:[email protected] 
    } 
    { 
    _id:"1111" 
    email:[email protected] 
    }] 
    employee:[ 

    { 
    _id:"35345" 
    email:[email protected] 
    } 
    { 
    _id:"35345" 
    email:[email protected] 
    } 
    ] 
    users:[ 
    { 
    _id:"56744" 
    email:[email protected] 
    } 
] 
} 

kann jemand mir auf diesem bitte helfen.

+0

Welche der doppelten Datensätze möchten Sie beibehalten, die erste? Weil die _id's einzigartig sind und inof für immer verloren sind. –

Antwort

0

Nun, es gibt ein paar Möglichkeiten, dies zu tun. Eine der einfachsten Methoden wäre die Verwendung von Bibliotheken wie lodash oder underscore und die Verwendung der Methode uniq, um doppelte Objekte auf der Basis einer Eigenschaft herauszufiltern.

Verwendung als Beispiel unterstreichen eine einzigartige Liste der Eigentümer Objekte zu erhalten:

_.uniq(owners, 'email')

Oder eine Funktion dieser Art würde auch funktionieren:

function uniqeValues(objects, property) { 
    let unique_values = {}; 

    objects.forEach(object=> { 
     if (!unique_values.hasOwnProperty(object[property])) { 
      unique_values[object[property]] = object; 
     } 
    }); 

    return Object.values(unique_values); 
} 
1

Da Sie Einzigartigkeit wollen über zwei Array, müssen Sie sie zuerst kombinieren.

let combined = result.owners.map(o => {o.type = 'owner'; return o;}) 
      .concat(result.users.map(u => {u.type = 'user'; return u;}); 
combined = _.uniqBy(combined, 'email'); 

result.owners = _.filter(combined, {type: 'owner'); 
result.users = _.filter(combined, {type: 'user'); 

gleiche Sache mit Mitarbeitern.

Verwandte Themen