JavaScript'te iki dizi nasıl birleştirilir ve öğeler nasıl tekilleştirilir

İki JavaScript dizim var:

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

Çıktının şöyle olmasını istiyorum:

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

Çıktı dizisinde tekrarlanan kelimeler kaldırılmalıdır.

JavaScript'te iki diziyi nasıl birleştiririm, böylece her diziden yalnızca benzersiz öğeleri orijinal dizilere eklendikleri sırayla alırım?

Çözüm

Dizileri sadece birleştirmek için (kopyaları kaldırmadan)

ES5 sürümü Array.concat kullanır:

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

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

ES6 sürümü [destructuring][2] kullanın

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

Çiftleri kaldırmanın 'yerleşik' bir yolu olmadığından ([ECMA-262][1] aslında bunun için harika olabilecek Array.forEach özelliğine sahiptir), bunu manuel olarak yapmak zorundayız:


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

Yeni çözüm ( Array.prototype.indexOf ve Array.prototype.concat kullanan):


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

Diğer tarayıcılar için indexOf yönteminin uygulaması MDC'den alınmıştır.

Yorumlar (6)