Cómo combinar dos matrices en JavaScript y eliminar los elementos duplicados

Tengo dos matrices de JavaScript:

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

Quiero que la salida sea

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

El array de salida debe tener las palabras repetidas eliminadas.

¿Cómo puedo combinar dos matrices en JavaScript para obtener sólo los elementos únicos de cada matriz en el mismo orden en que se insertaron en las matrices originales?

Solución

Para fusionar simplemente las matrices (sin eliminar los duplicados)

La versión ES5 utiliza Array.concat:

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

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

La versión ES6 utiliza [destructuring][2]

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

Dado que no hay una forma "integrada" de eliminar los duplicados ([ECMA-262][1] tiene Array.forEach que sería genial para esto), tenemos que hacerlo manualmente:


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

Nueva solución ( que utiliza Array.prototype.indexOf y Array.prototype.concat ):


Array.prototype.uniqueMerge = function( a ) {
    for ( var nonDuplicates = [], i = 0, l = a.length; i
Comentarios (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
  }

La implementación del método indexOf para otros navegadores está tomada de MDC

Comentarios (6)