2017-01-18 2 views
-1

Ich habe ein Array von ObjektenJavascript: Bestimmen Sie doppelte Objekte in einem Array und zurück Array von ihnen

[ 
{ 
    classname: ".icon" 
    data : "12" 
    }, 
    { 
    classname: ".icon1" 
    data : "34" 
    }, 
    { 
    classname: ".icon2" 
    data : "56" 
    }, 
    { 
    classname: ".icon" 
    data : "78" 
    }, 
    { 
    classname: ".icon1" 
    data : "90" 
    }, 
    { 
    classname: ".icon1" 
    data : "AB" 
    } 
] 

ich ein Array von Arrays durch ihre Vervielfältigung gruppiert zurückkehren wollen, wie diese

[ 
{ 
classname: ".icon" 
data : "12" 
}, 
{ 
classname: ".icon" 
data : "78" 
} 
] 

[ 
{ 
classname: ".icon1" 
data : "34" 
}, 
{ 
classname: ".icon1" 
data : "90" 
}, 
{ 
classname: ".icon1" 
data : "AB" 
} 
] 

Ich kann sowohl lodash als auch natives JavaScript verwenden. Wichtig: Die Reihenfolge ihres ursprünglichen Auftretens muss im zurückgegebenen array-Array beibehalten werden. Ich Keying auf den Namen der Eigenschaft 'classname'

+0

Peinlicher Versuche Karte reduzieren und lodash _uniq. Es gibt viel Code über das Entfernen von Duplikaten, aber nicht basierend auf einem Schlüsselwert – Rory

+0

Wie viele Punkte ist Ihr Projekt wert? – zerohero

+0

haben Sie versucht, anstatt der "remove" -Logik in diesen Beispielen diejenigen zu speichern, die doppelt vorhanden sind, und sie in einem Array zurückzugeben? weil ... wie ... sollte das funktionieren boet – zerohero

Antwort

2

Sie können dies tun mit reduce()

var data = [{"classname":".icon","data":"12"},{"classname":".icon1","data":"34"},{"classname":".icon2","data":"56"},{"classname":".icon","data":"78"},{"classname":".icon1","data":"90"},{"classname":".icon1","data":"AB"}] 
 

 
var obj = {} 
 
var result = data.reduce(function(r, e) { 
 
    if (!obj[e.classname]) { 
 
    obj[e.classname] = [] 
 
    r.push(obj[e.classname]) 
 
    } 
 
    obj[e.classname].push(e) 
 
    return r; 
 
}, []) 
 

 

 
console.log(result)

+0

Großartig :-) Mein Versuch war nicht weit von Ihnen, aber ich hatte eine logische Bedingung verpasst. Ich habe deine Antwort erhöht – Rory

Verwandte Themen