08.09.2010, 14:53
|
Интересующийся
|
|
Регистрация: 21.07.2010
Сообщений: 14
|
|
Метод 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()...
Как бы вы посоветовали решить эту проблему?
|
|
08.09.2010, 14:56
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Цикл for-in перебирает свойства объекта, коим является и remove. Для перебора элементов массива используется обычный цикл for.
http://alljs.ru/articles/array/iteration.html
|
|
08.09.2010, 15:02
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Используй hasOwnProperty. Должно помочь
UPD А вообще, конечно, такой способ перебора не для массивов
Последний раз редактировалось Sweet, 08.09.2010 в 15:06.
|
|
08.09.2010, 15:08
|
Интересующийся
|
|
Регистрация: 21.07.2010
Сообщений: 14
|
|
Это понятно. Но вы полагаете удобно использовать for вместо for in? Только потому что, библиотеке вздумалось изменить стандартный класс все ранее написанные скрипты нужно переделать?
Не совсем понял, как это должно мне помочь?
Цитата:
|
UPD А вообще, конечно, такой способ перебора не для массивов
|
UPD: Ок, а как тогда пробежаться по хэшу, когда мне нужны и ключи и значения?
Последний раз редактировалось voyager, 08.09.2010 в 15:13.
|
|
08.09.2010, 15:22
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от voyager
|
Не совсем понял, как это должно мне помочь?
|
я думаю, remove() из прототипа
Сообщение от voyager
|
как тогда пробежаться по хэшу, когда мне нужны и ключи и значения?
|
Если под хэшем подразумевается объект, то конечно for-in. А если массив - то for.
|
|
08.09.2010, 15:24
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от voyager
|
Но вы полагаете удобно использовать for вместо for in?
|
Это не я предлагаю использовать for вместо for-in, а вы используете for-in вместо for. Ещё раз: for-in перебирает свойства объекта, а не только целочисленные свойства, коими являются элементы массива. Так почему вы жалуетесь, что for-in захватывает кастомные методы? Он для этого и предназначен.
Сообщение от voyager
|
Только потому что, библиотеке вздумалось изменить стандартный класс все ранее написанные скрипты нужно переделать?
|
Не класс, а прототип. И не изменить, а добавить метод. Это вполне легальная ситуация. По ссылке выше описан случай, когда for-in взрывается и без добавления методов в прототип.
И да, если скрипты написаны неправильно, их нужно переписать.
Сообщение от voyager
|
а как тогда пробежаться по хэшу, когда мне нужны и ключи и значения?
|
А тут в чём проблема?
|
|
08.09.2010, 15:40
|
Интересующийся
|
|
Регистрация: 21.07.2010
Сообщений: 14
|
|
Ок, пример был несколько упрощен. На самом деле работа идет не с массивами а фактически с объектами.
mycars['xxx'] = "Saab";
mycars['www'] = "Volvo";
mycars['eee'] = "BMW";
И когда мне нужны не только значения но и ключи в ход идет:
for (var x in mycars)
{
alert(x +' - '+mycars[x]);
}
Тепрь, насколько я понимаю, мне везде прийдется вставить if hasOwnProperty...
|
|
08.09.2010, 15:45
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от voyager
|
На самом деле работа идет не с массивами а фактически с объектами.
|
Так и используйте объекты.
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 не нужен будет.
|
|
08.09.2010, 15:48
|
Интересующийся
|
|
Регистрация: 21.07.2010
Сообщений: 14
|
|
Это все логично, спасибо. Но мне уже такой JSON приходит, где это массивы .
|
|
08.09.2010, 15:49
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Не может вам такой JSON приходить. Или это не JSON.
|
|
|
|