2009-06-04 16 views
7

Mam tablicę indeksowaną ciągów, z której chciałbym usunąć element.Łączenie tablic indeksowanych ciągów w JavaScript

Rozważmy następujący przykład: kod

var arr = new Array();  
    arr[0] = "Zero"; 
    arr[1] = "One"; 
    arr[2] = "Two"; 
    arr.splice(1, 1); 

    for (var index in arr) 
     document.writeln(arr[index] + " "); 

    //This will write: Zero Two 

    var arr = new Array(); 
    arr["Zero"] = "Zero"; 
    arr["One"] = "One"; 
    arr["Two"] = "Two"; 

    arr.splice("One", 1); //This does not work 
    arr.splice(1, 1); //Neither does this 

    for (var index in arr) 
     document.writeln(arr[index] + " "); 

    //This will write: Zero One Two 

Jak usunąć „jeden” z drugiego przykładu jak ja w pierwszej kolejności?

+0

możliwym duplikatu [Znajdź wszystkie pasujące regex wzorów i indeks meczu w ciągu] (http: // stackoverflow. com/questions/6178335/find-all-matching-regex-patterns-and-index-of-the-match-in-the-string) – Gajus

Odpowiedz

20

Właściwym sposobem, aby to zrobić, nie jest z tablicy, ale obiektu:

var x = {}; 
x['Zero'] = 'Zero'; 
x['One'] = 'One'; 
x['Two'] = 'Two'; 
console.log(x); // Object Zero=Zero One=One Two=Two 
delete x['One']; 
console.log(x); // Object Zero=Zero Two=Two 
+1

Działa również dobrze z tablicą też: https://jsfiddle.net/6abLj89b/. – Daniel

+0

@Daniel - nie, nie, to nie modyfikuje tablicy. Zrób arr.length po dodaniu wartości i przed jej usunięciem. –

+0

Rozumiem. Ale co się dzieje? https://jsfiddle.net/6abLj89b/1/ – Daniel

4

Gdy tablica ma klucze strunowe (lub liczby, które nie następują), staje się Obiektem.

Obiekt nie ma metody splice (lub nie jest taki sam jak Array). Musisz napisać własny, tworząc nowy obiekt i skopiować do niego klucz, który chcesz zachować.

Ale bądź ostrożny! Klucze nie zawsze są zamawiane w ten sam sposób, w jaki zostały dodane do obiektu! To zależy od przeglądarki.

+0

Not true: https://jsfiddle.net/ycooo187/. – Daniel