removeDuplicates () nimmt ein Array von Objekten auf und gibt ein neues Array ohne doppelte Objekte zurück (basierend auf der id-Eigenschaft).
const allTests = [
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'},
{name: 'Test2', id: '2'},
{name: 'Test3', id: '3'}
];
function removeDuplicates(array) {
let uniq = {};
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true))
}
removeDuplicates(allTests);
Erwartetes Ergebnis:
[
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'}
];
Zuerst setzen wir den Wert der Variablen uniq auf ein leeres Objekt.
Als nächstes filtern wir durch das Array von Objekten. Filter erstellt ein neues Array mit allen Elementen, die den von der bereitgestellten Funktion implementierten Test bestehen.
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true));
Oben verwenden wir die Kurzschlussfunktion von &&. Wenn die linke Seite des && als wahr ausgewertet wird, wird der Wert rechts vom && zurückgegeben. Wenn die linke Seite falsch ist, wird zurückgegeben, was sich auf der linken Seite des && befindet.
Für jedes Objekt (obj) überprüfen wir uniq auf eine Eigenschaft mit dem Namen obj.id (In diesem Fall wird bei der ersten Iteration nach der Eigenschaft '1' gesucht.) Wir möchten das Gegenteil von dem, was es zurückgibt (entweder true) oder falsch) weshalb wir das! in! uniq [obj.id]. Wenn uniq bereits über die Eigenschaft id verfügt, wird true zurückgegeben, was zu false (!) Wertet und der Filterfunktion mitteilt, dass dieses Objekt NICHT hinzugefügt werden soll. Wenn die Eigenschaft obj.id jedoch nicht gefunden wird, wird false zurückgegeben, was dann als true (!) Auswertet und alles rechts von && oder (uniq [obj.id] = true) zurückgibt. Dies ist ein wahrheitsgemäßer Wert, der die Filtermethode anweist, dieses Objekt zum zurückgegebenen Array hinzuzufügen, und die Eigenschaft {1: true} zu uniq hinzufügt. Dadurch wird sichergestellt, dass keine andere Objektinstanz mit derselben ID erneut hinzugefügt wird.