Javascript bir dizideki bir öğenin ayarını nasıl kaldırabilirim?


138

'Bar' anahtarının bir dizi foo'sundan nasıl kaldırırım ki 'bar' görünmez

for(key in foo){alert(key);}

Yanıtlar:


243

Bir öğeyi diziden kaldırmayacağı için silme işlevini kullanmayın ; yalnızca tanımsız olarak ayarlar; bu da dizinin uzunluğuna doğru şekilde yansıtılmaz.

Anahtarı biliyorsanız splice yani

myArray.splice(key, 1);

Steven'ın pozisyonundaki biri için böyle bir şey deneyebilirsiniz:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

veya

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
+1 İyi bir nokta, ben de bu şekilde seviyorum: ejohn.org/blog/javascript-array-remove
CMS

3
@ThiefMaster - Açıklamak ister misiniz? Bunun ne anlama geldiğini bilmiyorum ve öğrenmeye hevesliyim. Her zaman olduğu gibi, bir düzenleme hazır olmayan bir yorumdan 1.000.000 kat daha iyidir; sahip olduğunuz temsilci ile bunu bilmelisiniz.
gidiyor

21
for (var key in myArray)Bunun yerine kullanın for (key in myArray)- aksi takdirde keygenel bir değişkendir ve bu döngü içinde aynı soruna sahip bir işlev çağırırsanız, beklenmedik sonuçlar alırsınız.
ThiefMaster

2
Dizide 'bar' ile eşleşen bir satırda birden çok öğe varsa, ikinci örneğin çalışmadığını unutmayın. Dizinin dizini değişecek ve öğelerin yarısını birleştirmeyi özleyeceksiniz. Bunun yerine, bir eşleşme bulunduğunda dizini azaltan bir for döngüsü kullanın.
Dave Lancea


52
delete foo[key];

: D


4
teknik olarak bu soruya cevap vermez. anahtar 'çubuğunu' kaldırmak istiyor. ve anahtar değişkeniniz bunu ima etmez. : P
Kon

4
Anahtar = 'çubuğu'; eval ("foo'yu sil. + anahtar); gizler ; D
olliej

3
Do DEĞİL kullanın eval. Bir nesnenin / dizinin bir anahtarının / dizininin silinmesi, kullanılmayan daha basit yöntemlerle elde edilebilir eval.
Dinei

4
Aslında, foo [anahtar] 'ı silme ile dizine alınan diziden kaldırırsanız, değeri foo [anahtar] = tanımsız olarak saklar ve foo.length değeri yanlış kalır. Bunun yerine SPLICE kullanın
Павел Иванов

delete foo [key] yanlış kullan; foo.splice (anahtar, 1) kullanmalıdır;
vnguyen

38

Önemli bir not: JavaScript Dizileri, PHP'den alışkın olabileceğiniz gibi ilişkilendirilebilir diziler değildir. "Dizi anahtarınız" bir dize ise, artık bir dizinin içeriği üzerinde işlem yapmıyorsunuzdur. Diziniz bir nesnedir ve <anahtar adı> adlı üyeye erişmek için köşeli ayraç gösterimi kullanıyorsunuz. Böylece:

var myArray = [];
myArray ["bar"] = true;
myArray ["foo"] = doğru;
uyarısı (myArray.length); // 0 döndürür.

diziye öğe eklemediğiniz için, yalnızca myArray öğesinin çubuğunu ve foo üyelerini değiştirdiniz.


37

Anahtar adını biliyorsanız sadece bunu yapın:

delete array['key_name']

2
Bu bir dizi değil! Bu bir nesne (evet, bunlar JS'de ilişkilendirilebilir diziler olarak adlandırılır, ancak hayır, bunlar gerçekten değildir ve bir JS dizisiyle tamamen çalışırsanız bu yöntem zararlıdır).
wintercounter

3

Ben böyle yapardım

 myArray.splice( myArray.indexOf('bar') , 1) 

1
Array.prototype.indexOf () yöntemi, bir anahtar için değil, bir dizideki bir değeri arar. Yani bu işe yaramayacak.
Nadav

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.