function areDifferentByIds(a, b) {
var idsA = a.map( function(x){ return x.id; } ).unique().sort();
var idsB = b.map( function(x){ return x.id; } ).unique().sort();
return (idsA.join(',') !== idsB.join(',') );
}
Dies ist die einfachste, die ich schaffen könnte. Ich denke, solche kleinen Funktionen müssen so in sich abgeschlossen sein wie möglich und brauchen keine anderen Funktionen. Dies macht sie lesbarer, wartbarer und natürlich wiederverwendbar. Ich habe deshalb die getIds-Funktion entfernt. Wenn Sie das anderswo verwenden, können Sie es behalten.
Sie könnten die gespeichert werden sollen function (x) { return x.id; }
innerhalb einer Variablen, und wieder verwenden es auf beiden map
s
Ich denke auch, dass es schneller ist, weil Join ziemlich schnell ist und keine for-Schleife benötigt.
BEARBEITEN Sie meinen nächsten Versuch
function areDifferentByIds(a, b) {
var idsA = a.map( function(x){ return x.id; } ).unique();
var idsB = b.map( function(x){ return x.id; } ).unique();
var idsAB = a.concat(b).unique();
return idsAB.length!==idsA.length
}
Zweitens können Sie es allgemeiner machen, indem Sie die zu prüfende Eigenschaft zu den Argumenten der Funktion hinzufügen. So etwas wie:
function areDifferentByProperty(a, b, prop) {
var idsA = a.map( function(x){ return x[prop]; } ).unique();
var idsB = b.map( function(x){ return x[prop]; } ).unique();
var idsAB = a.concat(b).unique();
return idsAB.length!==idsA.length
}
Drittens würde ich es viel lieber als EqualBy___ nennen. Scheint mir intuitiver, aber das ist nur ich.