SORU
7 HAZİRAN 2009, Pazar


Nasıl "bağımsız" dönüştürme; JavaScript bir dizi itiraz edebilir miyim?

JavaScript arguments nesne siğil—çoğu durumda bu sadece bir dizi gibi davranır, ama değil bir garipaslındabir dizi nesne. really something else entirely, yanaforEach, sort, filter, ve map gibi *4* yararlı işlevleri yok.

Basit döngü için basit bir bağımsız bir nesneden yeni bir dizi oluşturmak için kolay. Örneğin, bu tür bağımsız değişkenlerinin fonksiyonu

function sortArgs() {
    var args = [];
    for (var i = 0; i < arguments.length; i  )
        args[i] = arguments[i];
    return args.sort();
}

Ancak, bu sadece son derece yararlı JavaScript dizi fonksiyonları erişmek için yapmak zorunda değil, acınacak bir şey. Bir yerleşik şekilde yapmak için standart kütüphanesini kullanan var mı?

CEVAP
7 HAZİRAN 2009, Pazar


Aslında sadece Array'slice bağımsız değişken bir nesne işlevi, standart bir JavaScript dizi haline dönüştürür. kullanabilirsiniz Sadece el ile Dizi prototip üzerinden başvuru gerekecek:

function sortArgs() {
    var args = Array.prototype.slice.call(arguments);
    return args.sort();
}

Neden bu işe yarıyor mu? Burada ECMAScript 5 documentation itself bir alıntı:

NOT: slice işlev bilerek genel; onun gerektirmezbudeğer bir Dizi nesne. Bu nedenle bir yöntem olarak kullanmak için nesneleri başka türlü transfer olabilir. slice işlevi, bir ana bilgisayar için başarıyla uygulanabilir olup olmadığını nesne uygulaması bağımlıdır.

Bu nedenle, slice çalışır bir şey o arguments rahat yapar length bir özelliği vardır.


Eğer Array.prototype.slice laf, çok, biraz dizi harfleri kullanarak kısaltmak

var args = [].slice.call(arguments);

Ancak, eski sürümü daha açık olduğunu hissediyorum eğilimindedir, bunun yerine tercih ederim. Değişmez dizi gösterimde kötüye hacky hissediyor ve garip görünüyor.


Ayrıca, yaklaşan ES6 Uyum önerisi, Array.from verimli Dizi örneklerine Dizi gibi nesneleri dönüştürmek için kullanabilirsiniz. Ne yazık ki, Array.from şu anda sadece Firefox'un yeni sürümlerinde uygulanır ve nispeten kullanışsız tarayıcı desteği eksikliği nedeniyle.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • sghaff1

    sghaff1

    23 Mart 2009
  • Shantanu Sood

    Shantanu Soo

    3 Kasım 2008