SORU
18 EKİM 2009, Pazar


Javascript iki diziyi birleştirme ve de-yinelenen öğeleri

İki JavaScript diziler var:

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

Çıkış olmak istiyorum

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

Çıkış dizisi tekrarlanan sözcükler çıkarılmalıdır.

Nasıl ben orijinal dizi içine aynı sırayla her diziden sadece benzersiz öğeleri almak, böylece JavaScript iki diziyi birleştirme?

CEVAP
18 EKİM 2009, Pazar


Sadece diziler (kaldırma yinelenen olmadan) birleştirmek için kullanın. Array.concat:

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

var array3 = array1.concat(array2); // Merges both arrays
// [ 'Vijendra', 'Singh', 'Singh', 'Shakya' ]

'Yoktur' yinelenen (ECMA-262 aslında harika olurdu Array.forEach bunun için vardır) kaldırmak için, el ile yaptığımız: . inşa beri

Array.prototype.unique = function() {
    var a = this.concat();
    for(var i=0; i<a.length;   i) {
        for(var j=i 1; j<a.length;   j) {
            if(a[i] === a[j])
                a.splice(j--, 1);
        }
    }

    return a;
};

Daha sonra kullanmak için:

var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];
// Merges both arrays and gets unique items
var array3 = array1.concat(array2).unique(); 

Bu da diziler (i.sırasını koruyacaktır e, gerekli hayır sıralama).

DÜZENLEME:

Birçok kişi Array.prototype for in döngüler prototip büyütme hakkında rahatsız olduğundan, burada kullanmak için daha az invaziv bir yoludur:

function arrayUnique(array) {
    var a = array.concat();
    for(var i=0; i<a.length;   i) {
        for(var j=i 1; j<a.length;   j) {
            if(a[i] === a[j])
                a.splice(j--, 1);
        }
    }

    return a;
};

var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];
    // Merges both arrays and gets unique items
var array3 = arrayUnique(array1.concat(array2));

ES5 bulunduğu ilerici tarayıcılar ile çalışmak için yeterince şanslı olanlar, Object.defineProperty kullanabilirsiniz:

Object.defineProperty(Array.prototype, 'unique' {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function() {
        var a = this.concat();
        for(var i=0; i<a.length;   i) {
            for(var j=i 1; j<a.length;   j) {
                if(a[i] === a[j])
                    a.splice(j--, 1);
            }
        }

        return a;
    }
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • Need for Speed

    Need for Spe

    8 ŞUBAT 2006
  • whiteboy7thst

    whiteboy7ths

    1 Temmuz 2009