Die Herausforderung bei der Verwendung von JSON.stringify ist, dass, wenn das Objekt einen zirkulären Verweis enthalten könnte, dann wird es eine Ausnahme auslösen, z.B
var x1 = {};
x1.a = x1;
JSON.stringify(x1); // <- Uncaught TypeError: Converting circular structure to JSON
Was jedoch angedeutet, wenn Sie Objekte und keine Werte vergleichen, dann können Sie nicht nur einen Gleichheitsvergleich tun, da dies immer falsch sein wird, für verschiedene Objekte (auch wenn sie die gleichen Eigenschaften haben mit die gleichen Werte).
Wenn Sie einfach wurden Werte zu vergleichen, dann so etwas wie die unten funktionieren würde
var x = [1,2,2,3,4,2,6]; // Source list
var x2 = []; // Will hold the de-duped result
x.forEach(function(elem){if(x2.indexOf(elem) === -1) x2.push(elem);});
x2; // <- [1, 2, 3, 4, 6]
Wenn Sie Objekteigenschaften auf einer Ebene vergleichen wollen Sie so etwas wie die unten schreiben könnte (es kann ein einfacher Weg sein - nur gepeitscht diese zusammen)
function sameValues(o1, o2){
for(p in o1){
if(o1[p] !== o2[p]) return false;
}
for(p in o2){
if(o2[p] !== o1[p]) return false;
}
return true;
}
var Object1 = {connectorIndex: 1, nodeID: 6, Connectors: Object};
var Object2 = {connectorIndex: 1, nodeID: 6, Connectors: Object};
var Object3 = {connectorIndex: 1, nodeID: 7, Connectors: Object};
var Object4 = {connectorIndex: 2, nodeID: 7, Connectors: Object};
var Object5 = {connectorIndex: 1, nodeID: 7, Connectors: Object};
var arr = [Object1, Object2, Object3, Object4, Object5];
var result = [];
arr.forEach(function(e1){
if(!result.some(function(e2){return sameValues(e1,e2);})){
// No existing object with same top level values in target array, so add
result.push(e1);
}
});
// result will have the 1st, 3rd, and 4th object only
Es gibt keine Duplizierte Objekte, zwei Objekte sind nie gleich, also ist das Vergleichen von Objekten schwierig, wenn es eine andere Möglichkeit gibt, dies zu lösen, ist es wahrscheinlich besser, sonst müssten Sie jede Eigenschaft durch rekursives Iterieren überprüfen, um auch das referenzierte Objekt usw. zu vergleichen – adeneo