Метод remove() в стандартном Array
Вот хотел поинтересоваться, это ни кому не мешает?
Я так понимаю, Ext где-то доопределяет стандартный класс array, добавляя в него метод remove(). И хоть длина массива определяется корректно, после этого любой for in по массиву натыкается на этот remove... Ну т.е.: var mycars = new Array(); mycars[0] = "Saab"; mycars[1] = "Volvo"; mycars[2] = "BMW"; по for (var x in mycars) { alert(mycars[x]); } Получим: "Saab" "Volvo" "BMW" и, соответственно, код remove()... Как бы вы посоветовали решить эту проблему? |
Цикл for-in перебирает свойства объекта, коим является и remove. Для перебора элементов массива используется обычный цикл for.
http://alljs.ru/articles/array/iteration.html |
Используй hasOwnProperty. Должно помочь
UPD А вообще, конечно, такой способ перебора не для массивов |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
И да, если скрипты написаны неправильно, их нужно переписать. Цитата:
|
Ок, пример был несколько упрощен. На самом деле работа идет не с массивами а фактически с объектами.
mycars['xxx'] = "Saab"; mycars['www'] = "Volvo"; mycars['eee'] = "BMW"; И когда мне нужны не только значения но и ключи в ход идет: for (var x in mycars) { alert(x +' - '+mycars[x]); } Тепрь, насколько я понимаю, мне везде прийдется вставить if hasOwnProperty... |
Цитата:
http://alljs.ru/articles/array/whatis.html#assoc var mycars = {}; mycars['xxx'] = "Saab"; mycars['www'] = "Volvo"; mycars['eee'] = "BMW"; А лучше var mycars = { xxx: 'Saab', www: 'Volvo', eee: 'BMW' }; Object.prototype никто не трогает, как правило, hasOwnProperty не нужен будет. |
Это все логично, спасибо. Но мне уже такой JSON приходит, где это массивы :(.
|
Не может вам такой JSON приходить. Или это не JSON.
|
Часовой пояс GMT +3, время: 01:30. |