Метод 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, время: 17:15. |