Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.09.2010, 14:53
Интересующийся
Отправить личное сообщение для voyager Посмотреть профиль Найти все сообщения от voyager
 
Регистрация: 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()...
Как бы вы посоветовали решить эту проблему?
Ответить с цитированием
  #2 (permalink)  
Старый 08.09.2010, 14:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Цикл for-in перебирает свойства объекта, коим является и remove. Для перебора элементов массива используется обычный цикл for.

http://alljs.ru/articles/array/iteration.html
Ответить с цитированием
  #3 (permalink)  
Старый 08.09.2010, 15:02
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Используй hasOwnProperty. Должно помочь
UPD А вообще, конечно, такой способ перебора не для массивов

Последний раз редактировалось Sweet, 08.09.2010 в 15:06.
Ответить с цитированием
  #4 (permalink)  
Старый 08.09.2010, 15:08
Интересующийся
Отправить личное сообщение для voyager Посмотреть профиль Найти все сообщения от voyager
 
Регистрация: 21.07.2010
Сообщений: 14

Сообщение от Kolyaj Посмотреть сообщение
Цикл for-in перебирает свойства объекта, коим является и remove. Для перебора элементов массива используется обычный цикл for.

http://alljs.ru/articles/array/iteration.html
Это понятно. Но вы полагаете удобно использовать for вместо for in? Только потому что, библиотеке вздумалось изменить стандартный класс все ранее написанные скрипты нужно переделать?

Цитата:
hasOwnProperty
Не совсем понял, как это должно мне помочь?
Цитата:
UPD А вообще, конечно, такой способ перебора не для массивов
UPD: Ок, а как тогда пробежаться по хэшу, когда мне нужны и ключи и значения?

Последний раз редактировалось voyager, 08.09.2010 в 15:13.
Ответить с цитированием
  #5 (permalink)  
Старый 08.09.2010, 15:22
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от voyager
Не совсем понял, как это должно мне помочь?
я думаю, remove() из прототипа
Сообщение от voyager
как тогда пробежаться по хэшу, когда мне нужны и ключи и значения?
Если под хэшем подразумевается объект, то конечно for-in. А если массив - то for.
Ответить с цитированием
  #6 (permalink)  
Старый 08.09.2010, 15:24
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от voyager
Но вы полагаете удобно использовать for вместо for in?
Это не я предлагаю использовать for вместо for-in, а вы используете for-in вместо for. Ещё раз: for-in перебирает свойства объекта, а не только целочисленные свойства, коими являются элементы массива. Так почему вы жалуетесь, что for-in захватывает кастомные методы? Он для этого и предназначен.

Сообщение от voyager
Только потому что, библиотеке вздумалось изменить стандартный класс все ранее написанные скрипты нужно переделать?
Не класс, а прототип. И не изменить, а добавить метод. Это вполне легальная ситуация. По ссылке выше описан случай, когда for-in взрывается и без добавления методов в прототип.
И да, если скрипты написаны неправильно, их нужно переписать.

Сообщение от voyager
а как тогда пробежаться по хэшу, когда мне нужны и ключи и значения?
А тут в чём проблема?
Ответить с цитированием
  #7 (permalink)  
Старый 08.09.2010, 15:40
Интересующийся
Отправить личное сообщение для voyager Посмотреть профиль Найти все сообщения от voyager
 
Регистрация: 21.07.2010
Сообщений: 14

Ок, пример был несколько упрощен. На самом деле работа идет не с массивами а фактически с объектами.
mycars['xxx'] = "Saab";
mycars['www'] = "Volvo";
mycars['eee'] = "BMW";

И когда мне нужны не только значения но и ключи в ход идет:
for (var x in mycars)  
{  
   alert(x +' - '+mycars[x]);  
}

Тепрь, насколько я понимаю, мне везде прийдется вставить if hasOwnProperty...
Ответить с цитированием
  #8 (permalink)  
Старый 08.09.2010, 15:45
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 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 не нужен будет.
Ответить с цитированием
  #9 (permalink)  
Старый 08.09.2010, 15:48
Интересующийся
Отправить личное сообщение для voyager Посмотреть профиль Найти все сообщения от voyager
 
Регистрация: 21.07.2010
Сообщений: 14

Это все логично, спасибо. Но мне уже такой JSON приходит, где это массивы .
Ответить с цитированием
  #10 (permalink)  
Старый 08.09.2010, 15:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Не может вам такой JSON приходить. Или это не JSON.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многомерный массив в json Л_Денис Общие вопросы Javascript 1 21.04.2010 21:43
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 11:10
Как по событию вызвать метод определенного экземпляра объекта jvs jQuery 3 24.12.2009 16:04
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 19:29
1. Календарь 2. объект String метод getEMail Мандариновая Общие вопросы Javascript 8 31.10.2008 11:33