SORU
5 AĞUSTOS 2009, ÇARŞAMBA


Nasıl JavaScript bir dizi boş?

Bir dizi boş bir yol var ve eğer öyleyse muhtemelen .remove()?

Örneğin,

A = [1,2,3,4];

Nasıl boş olabilir?

CEVAP
5 AĞUSTOS 2009, ÇARŞAMBA


Bu çok önemli bir konu ve tartışmalara bir sürü neden olmuştur. Aslında doğru cevap vardır ve bu cevap çok uzun bir süre için kabul edilen yanıt olarak işaretlendi çünkü, yöntemleri burada yer alacak. Eğer bu cevap verin lütfen upvote eğer diğeri de karşılaştırdım o cevaplar.


Temizlemek için yollar mevcut bir dizi A:

Yöntem 1

(bu soru için benim orijinal cevap oldu)

A = [];

Bu kod değişken A yeni boş bir dizi olacak. Bu eğer yok olsaydı zaten mükemmelorijinal dizisi için başvurular 11**başka Bu aslında (boş) marka yeni bir dizi oluşturur, çünkü her yerde. Bu yöntem ile başka bir değişken veya özellik bu dizi başvurulan varsa, orijinal dizi değişmeden kalır, çünkü dikkatli olmalısın. Sadece orijinal değişken bir dizi başvurmak için bunu kullanın. A.

Bu da en hızlı çözüm.

Bu kod örneği, bu yöntemi kullanırken karşılaştığınız sorunu gösterir:

var arr1 = ['a','b','c','d','e','f'];
var arr2 = arr1;  // Reference arr1 by another variable 
arr1 = [];
console.log(arr2); // Output ['a','b','c','d','e','f']

Yöntem 2(Matthew Crumley suggested)

A.length = 0

Bu 0 uzunluğunu ayarlayarak varolan bir dizi açık olacak. Bu Javascript tüm uygulamaları çalışmayabilir iddia var ama böyle olmadığı ortaya çıktı. Bu aynı zamanda "ECMA 5 uzunluğunda bir dizi özellik yazma/okuma. çünkü katı modu kullanırken çalışır

Yöntem 3(Anthony suggested gibi)

A.splice(0,A.length)

.splice() kullanarak mükemmel çalışır, ama .splice() fonksiyon tüm kaldırılan öğeleri içeren bir dizi döndürür beri, aslında orijinal dizinin bir kopyasını döndürür. Kriterler bu performansı üzerinde hiçbir etkisi yoktur öneriyor.

Yöntem 4(tanguy_k suggested gibi)

while(A.length > 0) {
    A.pop();
}

Bu çözüm çok kısa ve özlü değil, aynı zamanda yavaş çözüm, daha önceki kriterler orijinal cevap başvurulan aykırıdır.

Performans

Bir takas tüm yöntemlerivarolan bir dizive yöntemleri 3 2 performans çok benzer ve bir sürü yöntem 4 daha hızlı. Bu benchmark bkz.

EDİT

answer aşağıda kendi Diadistis tarafından belirttiği gibi, dört yukarıda açıklanan yöntemlerden performansını belirlemek için kullanılan özgün kriterler kusurlu idi. Orijinal kriter 2. yineleme zaten boş bir dizi takas oldu temizlendi dizi yeniden.

Bu hata, aşağıdaki kriter düzeltmeleri: http://jsperf.com/array-destroy/151 . Açıkça yöntemleri #2 (length özelliği) ve #3 (ekleme) en hızlı yöntem orijinal dizi değişmeyen #1 sayma değil) olduğunu gösterir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NikkoNantone

    NikkoNantone

    21 Kasım 2011
  • Ricardo Cerqueira

    Ricardo Cerq

    28 Mayıs 2008
  • superemposed

    superemposed

    25 Aralık 2007