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?

1voto

Jonca33 Punkte 3004

Einzeilenlösung als Überleitung zu LiraNuna's:

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

// Merges both arrays
let array3 = array1.concat(array2); 

//REMOVE DUPLICATE
let removeDuplicate = [...new Set(array3)];
console.log(removeDuplicate);

0voto

David Kirk Punkte 302

Ich bin auf diesen Beitrag gestoßen, als ich versuchte, dasselbe zu tun, aber ich wollte etwas anderes ausprobieren. Ich habe einfach die untenstehende Funktion erfunden. Ich hatte auch eine andere Variable, 'compareKeys', (Array von Schlüsseln) für den oberflächlichen Objektvergleich. Ich werde es wahrscheinlich in eine Funktion in der Zukunft ändern.

Wie auch immer, ich habe diesen Teil nicht mit aufgenommen, weil er für die Frage nicht relevant ist. Ich habe meinen Code auch in den jsperf eingebaut, der herumgeht. Bearbeitet: Ich habe meinen Eintrag in jsperf korrigiert. Meine Funktion bekommt etwa 99k ops/sec im Vergleich zu 140k.

Zum Code: Ich erstelle zunächst ein Array mit den verfügbaren Indizes und eliminiere sie dann durch Iteration über das erste Array. Schließlich schiebe ich die "Überbleibsel" ein, indem ich das reduzierte Array der Indizes verwende, die nicht mit den beiden Arrays übereinstimmen.

http://jsperf.com/merge-two-arrays-keeping-only-unique-values/26

function indiceMerge(a1, a2) {
    var ai = [];
    for (var x = 0; x < a2.length; x++) {
        ai.push(x)
    };

    for (var x = 0; x < a1.length; x++) {
        for (var y = 0; y < ai.length; y++) {
            if (a1[x] === a2[ai[y]]) {
                ai.splice(y, 1);
                y--;
            }
        }
    }

    for (var x = 0; x < ai.length; x++) {
        a1.push(a2[ai[x]]);
    }

    return a1;
}

0voto

Cray Kao Punkte 573

Ich habe ein ähnliches Anliegen, aber es geht um Id der Elemente im Array.

Und hier ist die Art und Weise, wie ich die Deduplizierung durchführe.

Es ist einfach, leicht zu pflegen und gut zu benutzen.

// Vijendra's Id = Id_0
// Singh's Id = Id_1
// Shakya's Id = Id_2

let item0 = { 'Id': 'Id_0', 'value': 'Vijendra' };
let item1 = { 'Id': 'Id_1', 'value': 'Singh' };
let item2 = { 'Id': 'Id_2', 'value': 'Shakya' };

let array = [];

array = [ item0, item1, item1, item2 ];

let obj = {};
array.forEach(item => {
    obj[item.Id] = item;
});

let deduplicatedArray = [];
let deduplicatedArrayOnlyValues = [];
for(let [index, item] of Object.values(obj).entries()){
    deduplicatedArray = [ ...deduplicatedArray, item ];
    deduplicatedArrayOnlyValues = [ ...deduplicatedArrayOnlyValues , item.value ];
};

console.log( JSON.stringify(array) );
console.log( JSON.stringify(deduplicatedArray) );
console.log( JSON.stringify(deduplicatedArrayOnlyValues ) );

Das Konsolenprotokoll

[{"recordId":"Id_0","value":"Vijendra"},{"recordId":"Id_1","value":"Singh"},{"recordId":"Id_1","value":"Singh"},{"recordId":"Id_2","value":"Shakya"}]

[{"recordId":"Id_0","value":"Vijendra"},{"recordId":"Id_1","value":"Singh"},{"recordId":"Id_2","value":"Shakya"}]

["Vijendra","Singh","Shakya"]

0voto

Jim Punkte 1537

Nicht Performant, wenn Sie extrem große Listen haben, und dies ist nicht für das Zusammenführen, da viele Lösungen bereits dokumentiert worden sind, aber ich löste meine Probleme mit dieser Lösung (da die meisten Lösungen der Array-Filterung gelten für einfache Arrays)

const uniqueVehiclesServiced = 
  invoice.services.sort().filter(function(item, pos, ary) {
    const firstIndex = invoice.services.findIndex((el, i, arr) => el.product.vin === item.product.vin)

  return !pos || firstIndex == pos;
});

0voto

Samad Aghaei Punkte 17

Verwendung: https://gist.github.com/samad-aghaei/7250ffb74ed80732debb1cbb14d2bfb0

var _uniqueMerge = function(opts, _ref){
    for(var key in _ref)
        if (_ref && _ref[key] && _ref[key].constructor && _ref[key].constructor === Object)
          _ref[key] = _uniqueMerge((opts ? opts[key] : null), _ref[key] );
        else if(opts && opts.hasOwnProperty(key))
          _ref[key] = opts[key];
        else _ref[key] = _ref[key][1];
    return _ref;
}

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