1988 Stimmen

Zusammenführen von zwei Arrays in JavaScript und Duplizieren von Elementen

Ich habe zwei JavaScript-Arrays:

var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];

Ich möchte, dass die Ausgabe so aussieht:

var array3 = ["Vijendra","Singh","Shakya"];

Im Ausgabe-Array sollten wiederholte Wörter entfernt werden.

Wie kann ich zwei Arrays in JavaScript zusammenführen, so dass ich nur die eindeutigen Elemente aus jedem Array in der gleichen Reihenfolge erhalte, in der sie in die ursprünglichen Arrays eingefügt wurden?

6voto

cancerbero Punkte 6226
array1.concat(array2).filter((value, pos, arr)=>arr.indexOf(value)===pos)

Die nette Sache über diese ist Leistung und dass Sie im Allgemeinen, bei der Arbeit mit Arrays, Methoden wie Filter, Karte, etc. verketten, so dass Sie diese Zeile hinzufügen können und es wird konkaten und deduplizieren array2 mit array1 ohne einen Verweis auf die spätere (wenn Sie Methoden verketten Sie nicht haben), Beispiel:

someSource()
.reduce(...)
.filter(...)
.map(...) 
// and now you want to concat array2 and deduplicate:
.concat(array2).filter((value, pos, arr)=>arr.indexOf(value)===pos)
// and keep chaining stuff
.map(...)
.find(...)
// etc

(Ich mag es nicht, Array.prototype zu verschmutzen, und das wäre der einzige Weg, die Kette zu respektieren - die Definition einer neuen Funktion wird es brechen - also denke ich, dass etwas wie dies der einzige Weg ist, das zu erreichen)

6voto

Lajos Mészáros Punkte 3501
Array.prototype.add = function(b){
    var a = this.concat();                // clone current object
    if(!b.push || !b.length) return a;    // if b is not an array, or empty, then return a unchanged
    if(!a.length) return b.concat();      // if original is empty, return b

    // go through all the elements of b
    for(var i = 0; i < b.length; i++){
        // if b's value is not in a, then add it
        if(a.indexOf(b[i]) == -1) a.push(b[i]);
    }
    return a;
}

// Example:
console.log([1,2,3].add([3, 4, 5])); // will output [1, 2, 3, 4, 5]

5voto

DevWL Punkte 14388

Entduplizieren einzelner oder Zusammenführen und Entduplizieren mehrerer Array-Eingaben. Beispiel unten.

Verwendung von ES6 - Set, for of, Destrukturierung

Ich habe diese einfache Funktion geschrieben, die mehrere Array-Argumente akzeptiert. Tut so ziemlich das Gleiche wie die Lösung oben, nur mit mehr praktischen Anwendungsfällen. Diese Funktion nicht verketten doppelte Werte in ein Array nur, so dass es sie zu einem späteren Zeitpunkt löschen kann.

KURZE FUNKTIONSDEFINITION ( nur 9 Zeilen )

/**
* This function merging only arrays unique values. It does not merges arrays in to array with duplicate values at any stage.
*
* @params ...args Function accept multiple array input (merges them to single array with no duplicates)
* it also can be used to filter duplicates in single array
*/
function arrayDeDuplicate(...args){
   let set = new Set(); // init Set object (available as of ES6)
   for(let arr of args){ // for of loops through values
      arr.map((value) => { // map adds each value to Set object
         set.add(value); // set.add method adds only unique values
      });
   }
   return [...set]; // destructuring set object back to array object
   // alternativly we culd use:  return Array.from(set);
}

BENUTZUNGSBEISPIEL CODEPEN :

// SCENARIO 
let a = [1,2,3,4,5,6];
let b = [4,5,6,7,8,9,10,10,10];
let c = [43,23,1,2,3];
let d = ['a','b','c','d'];
let e = ['b','c','d','e'];

// USEAGE
let uniqueArrayAll = arrayDeDuplicate(a, b, c, d, e);
let uniqueArraySingle = arrayDeDuplicate(b);

// OUTPUT
console.log(uniqueArrayAll); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 43, 23, "a", "b", "c", "d", "e"]
console.log(uniqueArraySingle); // [4, 5, 6, 7, 8, 9, 10]

4voto

priolo priolus Punkte 116

Wenn Sie keine Duplikate einer bestimmten Eigenschaft (z. B. der ID) wünschen

let noDuplicate = array1.filter ( i => array2.findIndex(a => i.id==a.id)==-1 );
let result = [...noDuplicate, ...array2];

4voto

Jöcker Punkte 3163

Hier eine Option für Objekte mit Objektarrays:

const a = [{param1: "1", param2: 1},{param1: "2", param2: 2},{param1: "4", param2: 4}]
const b = [{param1: "1", param2: 1},{param1: "4", param2: 5}]

var result = a.concat(b.filter(item =>
         !JSON.stringify(a).includes(JSON.stringify(item))
    ));

console.log(result);
//Result [{param1: "1", param2: 1},{param1: "2", param2: 2},{param1: "4", param2: 4},{param1: "4", param2: 5}]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X