Wie man zwei Arrays ohne Duplikate in JavaScript zusammenführt
-
JavaScript-Merge-Arrays mit
spread
Syntax in ECMAScript 6 -
JavaScript-Mischen von Arrays mit der Funktion
Array.concat
in ECMAScript 5 -
Duplikate aus einem Array mit Hilfe der
for
-Schleife entfernen -
JavaScript entfernt Array-Duplikate aus einem Array mit
Array.prototype
in ECMAScript 6 -
JavaScript entfernt Duplikate aus einem Array mit
Object.defineProperty
in ECMAScript 5 -
Zusammenführen und nur eindeutige Werte beibehalten mit
Lo-Dash
oderUnderscore.js
-
Zusammenführen und nur eindeutige Werte behalten mit
Set
in ECMAScript 6 -
Zusammenführen ohne doppelte Werte mit
for
Schleife undDictionary
mit nur O(n)-Komplexität
In diesem Tutorial erfahren Sie, wie wir zwei Arrays in JavaScript ohne doppelte Werte zusammenführen können.
Zunächst werden wir die verschiedenen Zusammenführungsmethoden sowohl in der ES5- als auch in der ES6-Version zeigen.
Dann werden wir lernen, wie wir die Duplikate mit verschiedenen Methoden entfernen können.
Schließlich werden Sie lernen, die Operation in nur einem Schritt durchzuführen, entweder durch das Schreiben eigener Funktionen oder durch die Verwendung externer Bibliotheken.
Nehmen wir an, wir haben zwei Arrays arrayA
und arrayB
und wir wollen sie in arrayC
zusammenführen:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
var arrayC;
JavaScript-Merge-Arrays mit spread
Syntax in ECMAScript 6
Die spread
-Syntax (...
) wird verwendet, um den Inhalt iterierbarer Elemente an einer Stelle zu erweitern, an der Elemente wie z. B. Arrays erwartet werden, oder an der z. B. null oder mehr Argumente in einer Funktion erwartet werden:
var arr = [2, 4];
function add(x, y) {
return x + y;
}
console.log(add(...arr));
Lassen Sie uns nun unsere Arrays zu arrayC
unter Verwendung dieser spread
Syntax zusammenfügen:
arrayC = [...arrayA, ...arrayB];
console.log(arrayC);
Beispiel-Code:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
var arrayC;
console.log("Array A > "+arrayA);
console.log("Array B > "+arrayB);
//merging using the spread syntax
arrayC = [...arrayA,...arrayB];
console.log("Merged Using Spread Syntax >"+arrayC);
Ausgabe:
Array A > Java,JavaScript
Array B > C#,PHP,Java
Merged Using Spread Syntax >Java,JavaScript,C#,PHP,Java
JavaScript-Mischen von Arrays mit der Funktion Array.concat
in ECMAScript 5
Das Mischen unter Verwendung des Array.concat
wird verwendet, um den Inhalt des Eingabe-Arrays ( arrayB
) mit dem Inhalt des Quell-Arrays (arrayA
) zu verknüpfen.
arrayC = arrayA.concat(arrayB);
console.log(arrayC);
Wenn wir die Duplikate aus dem resultierenden Array entfernen wollen, können wir das auf mehrere Arten tun, also lassen Sie uns sehen, wie wir es tun können.
Beispiel:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
var arrayC;
console.log("Array A > "+arrayA);
console.log("Array B > "+arrayB);
//merging using Array.concat function in ECMAScript 5
arrayC = arrayA.concat(arrayB);
console.log("Merged Using Array.concat function >"+arrayC);
Ausgabe:
Array A > Java,JavaScript
Array B > C#,PHP,Java
Merged Using Array.concat function >Java,JavaScript,C#,PHP,Java
Duplikate aus einem Array mit Hilfe der for
-Schleife entfernen
Der einfachste Weg, die Duplikate zu entfernen, ist die Erstellung einer eigenen verschachtelten for-Schleife.
Unser Algorithmus wird wie folgt aussehen:
- Erstellen Sie einen Klon aus dem Eingabe-Array
inArray
, so dass wir das Original-Array nicht verändern. - Erstellen Sie eine verschachtelte Schleife, um das gefundene Duplikat mit
arr.splice()
zu finden und zu entfernen. Die äußere beginnt bein
und die innere bein+1
.
function removeDuplicates(inArray) {
var arr =
inArray
.concat() // create a clone from inArray so not to change input array
// create the first cycle of the loop starting from element 0 or n
for (var i = 0; i < arr.length; ++i) {
// create the second cycle of the loop from element n+1
for (var j = i + 1; j < arr.length; ++j) {
// if the two elements are equal , then they are duplicate
if (arr[i] === arr[j]) {
arr.splice(j, 1); // remove the duplicated element
}
}
}
return arr;
}
Dann können wir diese Funktion removeDuplicates
wie jede andere Funktion benutzen.
var arrayWithoutDuplicates = removeDuplicates(arrayC);
console.log(arrayWithoutDuplicates);
Beispiel:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
var arrayC;
console.log("Array A > "+arrayA);
console.log("Array B > "+arrayB);
//removing duplicates from an array using nested for loop
function removeDuplicates(inArray){
var arr = inArray.concat() // create a clone from inArray so not to change input array
//create the first cycle of the loop starting from element 0 or n
for(var i=0; i<arr.length; ++i) {
//create the second cycle of the loop from element n+1
for(var j=i+1; j<arr.length; ++j) {
//if the two elements are equal , then they are duplicate
if(arr[i] === arr[j]) {
arr.splice(j, 1); //remove the duplicated element
}
}
}
return arr;
}
arrayC = arrayA.concat(arrayB);
console.log("Merged arrayC > "+ arrayC );
console.log("Removing duplicates using removeDuplicates > "+ removeDuplicates(arrayC) );
Ausgabe:
Array A > Java,JavaScript
Array B > C#,PHP,Java
Merged arrayC > Java,JavaScript,C#,PHP,Java
Removing duplicates using removeDuplicates > Java,JavaScript,C#,PHP
JavaScript entfernt Array-Duplikate aus einem Array mit Array.prototype
in ECMAScript 6
Wir können die Duplikate auch mit Array.prototype
entfernen, falls wir ECMAScript 6 verwenden können.
Was bedeutet überhaupt prototype
? Der prototype
ist wie das Objekt, das mit allen Funktionen und Objekten in JavaScript
verbunden ist.
Lassen Sie uns sehen, wie wir den Array.prototype
verwenden können.
Unser Algorithmus wird wie folgt aussehen:
- Erstellen Sie einen Klon aus dem Array Object
this.concat()
, so dass wir das ursprüngliche Array nicht verändern - Erstellen Sie eine verschachtelte Schleife, um das mit
arr.splice()
gefundene doppelte Element zu finden und zu entfernen. Die äußere beginnt bein
und die innere bein+1
.
Array.prototype.removeDuplicates = function() {
var arr = this.concat(); // create a clone from the input so not to change
// the source
// create the first cycle of the loop starting from element 0 or n
for (var i = 0; i < arr.length; ++i) {
// create the second cycle of the loop from element n+1
for (var j = i + 1; j < arr.length; ++j) {
// if the two elements are equal , then they are duplicate
if (arr[i] === arr[j]) {
arr.splice(j, 1); // remove the duplicated element
}
}
}
return arr;
}
Der Aufruf dieses Prototyps könnte dann wie folgt aussehen:
var arrayWithoutDuplicates = arrayC.removeDuplicates();
console.log(arrayWithoutDuplicates);
Beispiel:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
var arrayC;
console.log("Array A > "+arrayA);
console.log("Array B > "+arrayB);
arrayC = arrayA.concat(arrayB);
//removing duplicates from an array using Array.prototype in ECMAScript 6
Array.prototype.removeDuplicatesPrototype = function() {
var arr = this.concat(); // get the input array
//create the first cycle of the loop starting from element 0 or n
for(var i=0; i<arr.length; ++i) {
//create the second cycle of the loop from element n+1
for(var j=i+1; j<arr.length; ++j) {
//if the two elements are equal , then they are duplicate
if(arr[i] === arr[j]) {
arr.splice(j, 1); //remove the duplicated element
}
}
}
return arr;
}
console.log("Merged arrayC > "+arrayC);
console.log("Removing duplicates using removeDuplicatesPrototype > "+arrayC.removeDuplicatesPrototype());
JavaScript entfernt Duplikate aus einem Array mit Object.defineProperty
in ECMAScript 5
Wenn wir nur ECMAScript 5 verwenden können, können wir unsere eigene Eigenschaft unter Verwendung von Object.defineProperty
erstellen. Auf diese Weise können wir Duplikate von allen Elementen vom Typ Array
entfernen.
Hier definieren wir den Eigenschaftstyp als Array-Prototyp, indem wir durch Eingabe von Array.prototype
schreiben. Der Name der Eigenschaft sollte als nächster Parameter als removeDuplicates
eingefügt werden.
Lassen Sie uns sehen, wie er korrekt geschrieben wird:
Object.defineProperty(Array.prototype, 'removeDuplicates', {
// defining the type and name of the property
enumerable: false,
configurable: false,
writable: false,
value: function() {
var arr = this.concat(); // get the input array
// create the first cycle of the loop starting from element 0 or n
for (var i = 0; i < arr.length; ++i) {
// create the second cycle of the loop from element n+1
for (var j = i + 1; j < arr.length; ++j) {
// if the two elements are equal , then they are duplicate
if (arr[i] === arr[j]) {
arr.splice(j, 1); // remove the duplicated element
}
}
}
return arr;
}
});
Dann können wir diese Eigenschaft direkt so aufrufen:
var arrayWithoutDuplicates = arrayC.removeDuplicates();
console.log(arrayWithoutDuplicates);
Beispiel
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
var arrayC;
console.log("Array A > "+arrayA);
console.log("Array B > "+arrayB);
arrayC = arrayA.concat(arrayB);
//removing duplicates from an array using defineProperty in ECMAScript 5
Object.defineProperty(Array.prototype, 'removeDuplicatesProperty', { //defining the type and name of the property
enumerable: false,
configurable: false,
writable: false,
value: function() {
var arr = this.concat(); // get the input array
//create the first cycle of the loop starting from element 0 or n
for(var i=0; i<arr.length; ++i) {
//create the second cycle of the loop from element n+1
for(var j=i+1; j<arr.length; ++j) {
//if the two elements are equal , then they are duplicate
if(arr[i] === arr[j]) {
arr.splice(j, 1); //remove the duplicated element
}
}
}
return arr;
}
});
console.log("Merged arrayC > "+arrayC);
console.log("Removing duplicates using removeDuplicatesProperty > "+arrayC.removeDuplicatesProperty() );
Zusammenführen und nur eindeutige Werte beibehalten mit Lo-Dash
oder Underscore.js
Wenn das Ziel darin besteht, ein neues Array mit eindeutigen Werten aus zwei oder mehr Arrays zu erhalten und externe Dateien zu verwenden, können wir dazu die Lo-Dash
-Bibliothek verwenden.
Zuerst müssen wir die Bibliothek mit Cloudflare CDN
innerhalb der HTML-Vorlage importieren,
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Dann benutzen wir die Bibliothek wie:
arrayC = _.union(arrayA, arrayB);
Beispiel:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
console.log('Array A > ' + arrayA);
console.log('Array B > ' + arrayB);
// merging arrayA and arrayB keeping only unique values using Lo-Dash library
// don't forget to import the script using <script
// src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
console.log(
'Merging arrayA and arrayB keeping only unique values using Lo-Dash Lib. > ' +
_.union(arrayA, arrayB));
Zusammenführen und nur eindeutige Werte behalten mit Set
in ECMAScript 6
Wenn wir ECMAScript 6 verwenden können und unser Ziel nur die eindeutigen Werte mehrerer Arrays sind, dann kann Set
eine sehr gute Option sein.
können wir es wie im folgenden Beispiel mit der spread
-Syntax verwenden:
arrayC = [...new Set([...arrayA, ...arrayB])];
Oder wir können es wie folgt verwenden
arrayC = Array.from(new Set(arrayA.concat(arrayB)));
Beispiel:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
console.log('Array A > ' + arrayA);
console.log('Array B > ' + arrayB);
// merging arrayA and arrayB keeping unique values using Set in ECMAScript 6
console.log(
'Merging arrayA and arrayB keeping only unique values using Set > ' +
Array.from(new Set(arrayA.concat(arrayB))));
console.log(
'Merging arrayA and arrayB keeping only unique values using Set with spread syntax > ' +
[...new Set([...arrayA, ...arrayB])]);
Zusammenführen ohne doppelte Werte mit for
Schleife und Dictionary
mit nur O(n)-Komplexität
Eine andere Möglichkeit, zwei Arrays zu verschmelzen und die Ergebnisse ohne doppelte Werte zu erhalten, besteht darin, die Idee des Dictionaries
in JavaScript
zu verwenden, wobei wir keine zwei doppelten Werte haben können.
function mergeAndGetUnique(arrayA, arrayB) {
var hash = {};
var x;
for (x = 0; i < arrayA.length; i++) {
hash[arrayA[i]] = true;
}
for (x = 0; i < arrayB.length; i++) {
hash[arrayB[i]] = true;
}
return Object.keys(hash);
}
Dann können wir unsere Funktion so verwenden:
arrayC = mergeAndGetUnique(arrayA, arrayB);
Beispiel:
var arrayA = ['Java', 'JavaScript'];
var arrayB = ['C#', 'PHP', 'Java'];
var arrayC;
console.log("Array A > "+arrayA);
console.log("Array B > "+arrayB);
arrayC = arrayA.concat(arrayB);
//merging arrayA and arrayB keeping unique values using dictionary with O(n) complexity
function mergeAndGetUnique(arrayA, arrayB) {
var hash = {};
var x;
for (x = 0; x < arrayA.length; x++) {
hash[arrayA[x]] = true;
}
for (x = 0; x < arrayB.length; x++) {
hash[arrayB[x]] = true;
}
return Object.keys(hash);
}
console.log("Merging arrayA and arrayB keeping only unique values using Set with spread syntax > "+ mergeAndGetUnique(arrayA, arrayB) );