Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2013, 11:40   #1
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию Возвращает пустой массив

Всем привет! Написал функцию, которая должна взять все аттрибуты типа data-name="value":
Код:
function get_data(elem){
  var at = elem[0].attributes,
    res = new Array();
  for (var i in at){
    if(at[i].name && at[i].name.substr(0,5)=='data-'){
      res[at[i].name.substr(5)]=at[i].value;
    }
  }
  console.log(res);
  return res;
}
Интересно то, что console.log выводит массив, а return его не возвращает, точнее возвращает, но пустой. Не могу понять в чем дело. Помогите разобраться пожалуйста. Заранее спасибо.
Mr_freeman вне форума Ответить с цитированием
Старый 07.10.2013, 13:39   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Вы путаете массивы и объекты
Код:
function get_data(elem){
  var at = elem[0].attributes;
  // Создаем пустой объект, а не массив !
  var res = {};
  for (var i in at){
    if(at[i].name && at[i].name.substr(0,5)=='data-'){
      // так добавляются значения именно в объект
      res[at[i].name.substr(5)]=at[i].value;
    }
  }
  console.log(res);
  return res;
}
Cronos20 вне форума Ответить с цитированием
Старый 07.10.2013, 14:00   #3
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
Вы путаете массивы и объекты
Код:
function get_data(elem){
  var at = elem[0].attributes;
  // Создаем пустой объект, а не массив !
  var res = {};
  for (var i in at){
    if(at[i].name && at[i].name.substr(0,5)=='data-'){
      // так добавляются значения именно в объект
      res[at[i].name.substr(5)]=at[i].value;
    }
  }
  console.log(res);
  return res;
}
Почему с массивом так не проходит? В том же Pascal или PHP это прекрасно работает. Странно что здесь по-другому.
Mr_freeman вне форума Ответить с цитированием
Старый 07.10.2013, 15:01   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от Mr_freeman Посмотреть сообщение
Почему с массивом так не проходит? В том же Pascal или PHP это прекрасно работает. Странно что здесь по-другому.
В массивы заложены определенные операции по работе с оными, т.е. вы берете и расширяете как объект пустой массив, в итоге и получаете пустой массив с дополнительными свойствами.

По объекту можно пробежаться конструкцией
Код:
for (... in ...) {}
дополнительные свойства там покажутся.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 14.10.2013, 13:41   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от Mr_freeman Посмотреть сообщение
Почему с массивом так не проходит? В том же Pascal или PHP это прекрасно работает. Странно что здесь по-другому.
Потому что это не Pascal и не PHP. Массив может иметь только целочисленные индексы (0, 1, 2...), а вы пытаетесь добавить строковые.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пустой массив. Predator199 PHP 1 13.10.2012 19:53
DataRow.GetColumnsInError возвращает пустой массив Sanuch89 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 25.09.2012 13:01
Функция возвращает массив Рик Общие вопросы Delphi 5 22.03.2011 09:07
не возвращает массив... mrgrudge PHP 1 01.11.2010 11:58
не возвращает массив... mrgrudge PHP 2 26.10.2010 09:37