La sfida con l'utilizzo di JSON.stringify è che se l'oggetto potrebbe contenere un riferimento circolare, allora sarà un'eccezione, per esempio
var x1 = {};
x1.a = x1;
JSON.stringify(x1); // <- Uncaught TypeError: Converting circular structure to JSON
Come accennato però, se si confrontano gli oggetti e non i valori, allora non si può semplicemente fare un confronto di uguaglianza, in quanto questo sarà sempre falso per gli oggetti differenti (anche se hanno le stesse proprietà con gli stessi valori).
Se si stavano semplicemente confrontando i valori, quindi qualcosa di simile al di sotto avrebbe funzionato
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]
Se si desidera confrontare le proprietà degli oggetti di un livello si potrebbe scrivere qualcosa di simile al di sotto (ci può essere un modo più semplice - appena frustato questo insieme)
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
Non vi sono oggetti duplicati, due oggetti non sono mai uguali, quindi confrontare gli oggetti è complicato, se c'è un altro modo per risolverli, probabilmente è meglio, altrimenti dovresti controllare ogni proprietà con iterazioni ricorsive per confrontare anche l'oggetto di riferimento ecc. – adeneo