2017-08-09 6 views
0

Ich habe eine Reihe von Objekten in meinem TypeScript-Code und ich muss die doppelten Objekte herausholen. Der folgende Code macht die Arbeit für mich:Erhalten von doppelten Objekten aus meinem Array in TypeScript

const uniqueObjects = Array.from(new Set(nonUniqueObjects.map((x) => { 
     return JSON.stringify(x); 
     }))).map((y) => JSON.parse(y)); 

Das Problem ist, wenn ich den Code ausführen bekomme ich einen Fehler von Super Typoskript Lader, die die folgenden

Argument of type '{}' is not assignable to parameter of type 'string'.

Der Code, der es doesn ist‘ Wahrscheinlich gefällt mir auch die .map((y) => JSON.parse(y));

Ich möchte dies auch ohne var oder let erreichen, nur const.

Antwort

0

Die Lösung gefunden. Das Problem war, mit

.map((y) => JSON.parse(y)); 

Mein Typoskript Compiler scheint nicht zu mögen, dass ‚y‘ war kein String, obwohl sie es in einen String. Also habe ich es gelöst, indem ich toString() aufgerufen habe.

.map((y) => JSON.parse(y.toString())); 

Die Komplettlösung für die in einem Array nicht eindeutige Objekte entfernen:

const uniqueObjects = Array.from(new Set(nonUniqueObjects.map((x) => JSON.stringify(x)))).map((y) => JSON.parse(y.toString())); 

Wahrscheinlich müssen noch einige Fehlerbehandlung zu tun, aber das ist eine andere Geschichte.

0

Versuchen mit der Verbreitung Betreiber:

let nonUniqueObjects = [{a : 1} , {b : 2}, {a : 1}, {b : 2}, {c : 3}] 
 

 
const uniqueObjects = [...new Set(nonUniqueObjects.map(x => JSON.stringify(x)))] 
 
\t \t  .map(y => JSON.parse(y)) 
 

 
console.log(uniqueObjects)

+0

Immer noch den gleichen Fehler. Ich bin mir ziemlich sicher, dass es etwas mit TypeScript zu tun hat, da dies perfekt in Javascript funktioniert – user2515670

0

Hier

var nonUniqueObjects = [{ 
 
    'id': 1, 
 
    'name': 'A' 
 
}, { 
 
    'id': 2, 
 
    'name': 'B' 
 
}, { 
 
    'id': 1, 
 
    'name': 'A' 
 
}]; 
 

 
var uniqueObjects = new Set(); 
 
nonUniqueObjects.forEach(e => uniqueObjects.add(JSON.stringify(e))); 
 
uniqueObjects = Array.from(uniqueObjects).map(e => JSON.parse(e)); 
 

 
console.log(JSON.stringify(uniqueObjects));

var uniqueObjects = new Set(); 
nonUniqueObjects.forEach(e => uniqueObjects.add(JSON.stringify(e))); 
uniqueObjects = Array.from(uniqueObjects).map(e => JSON.parse(e)); 
+0

Ich hätte erwähnen sollen, aber ich versuche dies zu tun, ohne var oder lassen Sie – user2515670

+0

das ist nur ein Beispiel zu zeigen. Siehe die aktualisierte Antwort mit Code. – Faisal

+0

Wenn UniqueObjects eine Konstante ist, können Sie ihr den Array.from-part nicht zuweisen. Sie würden am Ende mit "Uncaught TypeError: Zuordnung zu konstanter Variable" enden. – user2515670

Verwandte Themen