Kuinka yhdistää kaksi taulukkoa JavaScriptissä ja poistaa päällekkäiset kohteet

Minulla on kaksi JavaScript-joukkoa:

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

Haluan, että tuloste on:

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

Tulosjoukosta pitäisi poistaa toistuvat sanat.

Miten yhdistän kaksi matriisia JavaScriptissä niin, että saan kummastakin matriisista vain yksilölliset kohteet samassa järjestyksessä, jossa ne lisättiin alkuperäisiin matriiseihin?

Ratkaisu

Yhdistääksesi matriisit (poistamatta kaksoiskappaleita).

ES5-versiossa käytetään Array.concat:

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

console.log(array1.concat(array2));

ES6-versiossa käytetään [destructuring][2]

const array1 = ["Vijendra","Singh"];
const array2 = ["Singh", "Shakya"];
const array3 = [...array1, ...array2];

Koska ei ole olemassa 'sisäänrakennettua' tapaa poistaa kaksoiskappaleet ([ECMA-262][1]:ssa on itse asiassa Array.forEach, joka olisi loistava tähän tarkoitukseen), meidän on tehtävä se manuaalisesti:


Array.prototype.unique = function() {
    var a = this.concat();
    for(var i=0; i
Kommentit (16)

Uusi ratkaisu ( joka käyttää Array.prototype.indexOf ja Array.prototype.concat ):


Array.prototype.uniqueMerge = function( a ) {
    for ( var nonDuplicates = [], i = 0, l = a.length; i
Kommentit (16)
//Array.indexOf was introduced in javascript 1.6 (ECMA-262) 
//We need to implement it explicitly for other browsers, 
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt, from)
  {
    var len = this.length >>> 0;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}
//now, on to the problem

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

var merged = array1.concat(array2);
var t;
for(i = 0; i < merged.length; i++)
  if((t = merged.indexOf(i + 1, merged[i])) != -1)
  {
    merged.splice(t, 1);
    i--;//in case of multiple occurrences
  }

indexOf-menetelmän toteutus muille selaimille on otettu MDC:stä

Kommentit (6)