Hier ist eine etwas andere Sichtweise auf die Schleife. Mit einigen der Optimierungen in der neuesten Version von Chrome ist dies die schnellste Methode, um die Vereinigung der beiden Arrays aufzulösen (Chrome 38.0.2111).
http://jsperf.com/merge-two-arrays-keeping-only-unique-values
var array1 = ["Vijendra", "Singh"];
var array2 = ["Singh", "Shakya"];
var array3 = [];
var arr = array1.concat(array2),
len = arr.length;
while (len--) {
var itm = arr[len];
if (array3.indexOf(itm) === -1) {
array3.unshift(itm);
}
}
while-Schleife: ~589k ops/s
filtern: ~445k ops/s
lodash: 308k ops/s
for-Schleifen: 225k ops/s
Ein Kommentar wies darauf hin, dass eine meiner Setup-Variablen dazu führte, dass meine Schleife dem Rest vorauseilte, weil sie kein leeres Array initialisieren musste, in das sie schreiben konnte. Dem stimme ich zu. Deshalb habe ich den Test umgeschrieben, um das Spielfeld auszugleichen, und eine noch schnellere Option eingebaut.
http://jsperf.com/merge-two-arrays-keeping-only-unique-values/52
let whileLoopAlt = function (array1, array2) {
const array3 = array1.slice(0);
let len1 = array1.length;
let len2 = array2.length;
const assoc = {};
while (len1--) {
assoc[array1[len1]] = null;
}
while (len2--) {
let itm = array2[len2];
if (assoc[itm] === undefined) { // Eliminate the indexOf call
array3.push(itm);
assoc[itm] = null;
}
}
return array3;
};
In dieser alternativen Lösung habe ich die assoziative Array-Lösung der einen Antwort kombiniert, um die .indexOf()
Aufruf in der Schleife, der die Dinge mit einer zweiten Schleife stark verlangsamte, und berücksichtigte einige der anderen Optimierungen, die andere Benutzer in ihren Antworten vorgeschlagen haben.
Die oberste Antwort hier mit der Doppelschleife auf jedem Wert (i-1) ist immer noch deutlich langsamer. lodash ist immer noch stark, und ich würde es immer noch jedem empfehlen, dem es nichts ausmacht, eine Bibliothek zu seinem Projekt hinzuzufügen. Für diejenigen, die das nicht wollen, ist meine while-Schleife immer noch eine gute Antwort, und die Filter-Antwort hat hier eine sehr starke Leistung, die alle meine Tests mit dem neuesten Canary Chrome (44.0.2360) zum Zeitpunkt dieses Schreibens übertrifft.
Überprüfen Sie Mikes Antwort y Dan Stocker's Antwort wenn Sie einen Gang zulegen wollen. Das sind bei weitem die schnellsten Ergebnisse, nachdem ich fast alle in Frage kommenden Antworten durchgegangen bin.