Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Изучение JS

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Тут не вопрос - что почитать и.т.д. :)
etoYA
Отправлено: 06 Июня, 2014 - 18:56:15
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Всем привет. Пару дней назад погрузился в JS, начал с _http://learn.javascript.ru
Так как я без практики вообще не усваиваю теорию, думаю, как и многие другие, то я решил поискать тестовых заданий и решать их.

Вот одно из них:

источник _http://company.yandex.ru/job/vacancies/dev_int_news.xml

С бэкенда приходит массив:

CODE (htmlphp):
скопировать код в буфер обмена
  1. [
  2.     {name: 'Вести.Ру', type: 'tv'},
  3.     {name: 'Итоги', type: 'smi'},
  4.     {name: 'Вести.ФМ', type: 'radio'},
  5.     {name: 'НТВ', type: 'tv'},
  6.     {name: 'Огонёк', type: 'smi'},
  7.     {name: 'Аргументы и факты', type: 'smi'},
  8.     {name: 'ТВ Культура', type: 'tv'},
  9.     {name: 'Коммерсант ФМ', type: 'radio'}
  10. ]
  11.  


Необходимо вывести список источников, сгруппированный по типу. Ваши действия?

Я сделал это так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. var backend = [
  2.     {name: 'Вести.Ру', type: 'tv'},
  3.     {name: 'Итоги', type: 'smi'},
  4.     {name: 'Вести.ФМ', type: 'radio'},
  5.     {name: 'НТВ', type: 'tv'},
  6.     {name: 'Огонёк', type: 'smi'},
  7.     {name: 'Аргументы и факты', type: 'smi'},
  8.     {name: 'ТВ Культура', type: 'tv'},
  9.     {name: 'Коммерсант ФМ', type: 'radio'}
  10. ];
  11.  
  12. function groupByType(arr){
  13.   // объект, который содержит уникальные типы.
  14.   // каждое свойство объекта содержит массив из названий источника.
  15.   var types = {};
  16.  
  17.   // перебираем полученный массив
  18.   for (var i = 0; i < arr.length; i++){
  19.    // если тип источника является уникальным, то записываем его в types.
  20.    if (!(arr[i].type in types)){
  21.      types[arr[i].type] = [];
  22.    }
  23.    // записываем источник в соответствующее свойство объекта types
  24.    types[arr[i].type].push(arr[i].name);
  25.  }
  26.  return types;
  27. }
  28. console.log(groupByType(backend));


Правильно ли я сделал? Если нет, то почему и как правильно.
Как бы вы это сделали?
 
 Top
Ch_chov
Отправлено: 06 Июня, 2014 - 20:24:07
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




etoYA пишет:
Как бы вы это сделали?

Я бы примерно так же сделал.

Если IE8 не нужен, то можно не много упростить:
CODE (javascript):
скопировать код в буфер обмена
  1. var result = backend.reduce(function(previous, current){
  2.   (previous[current.type] = previous[current.type] || []).push(current.name);
  3.   return previous;
  4. }, {});


В underscorejs вообще ничего делать не надо:
CODE (javascript):
скопировать код в буфер обмена
  1. var result = _.groupBy(backend, 'type');
 
 Top
etoYA
Отправлено: 06 Июня, 2014 - 21:48:53
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Ch_chov, спасибо. Нужно сначала чистый js довести до нормального уровня).
 
 Top
nerv
Отправлено: 07 Июня, 2014 - 12:58:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




etoYA пишет:
Необходимо вывести список источников, сгруппированный по типу. Ваши действия?

На мой взгляд формулировка "вывести по типу" слишком расплывчатая.
Если собираешься идти работать в Яндекс, лучше уточнить, что именно они имели ввиду.

Я бы отсортировал массив по типу Улыбка

Хотя, скорее под "вывести по типу" они имели ввиду то, что ты сделал.

(Отредактировано автором: 07 Июня, 2014 - 13:00:44)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
etoYA
Отправлено: 08 Июня, 2014 - 16:44:09
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




nerv, какой там Яндекс, я js учу пару дней, а тут сразу в Яндекс, нет, лишь искал задачиУлыбка Если есть варианты с задачками по js, а еще лучше, что б к этим задачам прикладывалась инструкция по их решению - было бы великолепноУлыбка.

p.s learn.javascript.ru прошел. Улыбка

(Отредактировано автором: 08 Июня, 2014 - 16:44:41)

 
 Top
LIME
Отправлено: 08 Июня, 2014 - 16:51:20
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




весь прошел?
за пару дней?
посмотри вдруг там 2ая глава есть)
 
 Top
etoYA
Отправлено: 08 Июня, 2014 - 19:20:19
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




LIME, нее офк не весьУлыбка
Но я не смотрел в очевидные аля getDocumentBy****, массивы и.т.д

(Отредактировано автором: 08 Июня, 2014 - 19:21:27)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB