2009-06-04 4 views
7

У меня есть строковый индексированный массив, из которого я хотел бы удалить элемент.Скрещивание строкового индексированного массива в JavaScript

Рассмотрим следующий пример кода:

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 

Как удалить «один» из второго примера, как я сделал в первую очередь?

+0

возможного дубликата [Найти все соответствующие регулярные выражения и индекс матча в строке] (HTTP: // StackOverflow. com/questions/6178335/find-all-matching-regex-patterns-and-index-of-the-match-in-the-string) – Gajus

ответ

20

Правильный способ сделать это не с массивом, но объект:

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

Работает отлично с массивом: https://jsfiddle.net/6abLj89b/. – Daniel

+0

@ Daniel - нет, это не так, это не модифицирует массив. Сделайте arr.length после добавления значения и перед его удалением. –

+0

Я вижу. Но что тогда происходит? https://jsfiddle.net/6abLj89b/1/ – Daniel

4

Как только массив имеет строковые ключи (или числа, которые не следуют), он становится объектом.

Объект не имеет метода сращивания (или не совпадает с массивом). Вы должны написать свой собственный, создав новый объект и скопировав в него ключ, который вы хотите сохранить.

Но будьте осторожны! Ключи не всегда упорядочены так же, как они были добавлены в объект! Это зависит от браузера.

+0

Неверно: https://jsfiddle.net/ycooo187/. – Daniel