Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ЧаВО - часто задаваемые вопросы (faq) (https://javascript.ru/forum/misc/9459-chavo-chasto-zadavaemye-voprosy-faq.html)

tenshi 23.11.2012 23:45

Цитата:

Сообщение от melky (Сообщение 217514)
return list.filter(function (val) {
    return !!val[name];
});

тогда уж так:
return list.map(function (value) {
    return value[name]
}).filter(function (val) {
    return !!val;
});

но как-то это криво)

melky 23.11.2012 23:51

Цитата:

Сообщение от tenshi
тогда уж так:

зачем??

tenshi 24.11.2012 00:28

у тебя результат не правильный потому что

FINoM 24.11.2012 03:57

Кормить Тенши больше не хочется.

У меня вопрос, для которого не хочется создавать отдельную тему и который уже когда-то обсуждался: для чего создан void в JS? Я не думаю, что у создателей языка просто зачесалась левая пятка и они решили добавить альтернативу undefined. Я вижу только одну возможную причину: использование void там, где undefined может быть перезаписана. Но, все равно, это мне кажется неадекватным костылем, иначе перезапись undefined могли бы запретить, как и перезапись NaN, Infinity и др.

tenshi 24.11.2012 12:57

> Кормить Тенши больше не хочется.

слив засчитан)

> для чего создан void в JS?

void function(){
    // ...
}()

> иначе перезапись undefined могли бы запретить

думаю тогда и undefined никакого не было. люди просто юзали эту неопределённую переменную

melky 24.11.2012 14:36

Цитата:

Сообщение от tenshi
у тебя результат не правильный потому что

поподробнее. в чём ошибка?

tenshi 24.11.2012 14:38

Цитата:

Сообщение от melky (Сообщение 217590)
поподробнее. в чём ошибка?

внимательно посмотри чем отличаются оба кода. если ты не видишь разницы, то у меня для тебя плохие новости.

melky 24.11.2012 14:44

Цитата:

Сообщение от tenshi
внимательно посмотри чем отличаются оба кода. если ты не видишь разницы, то у меня для тебя плохие новости.

действительно

Цитата:

Сообщение от tenshi (Сообщение 217518)
тогда уж так:
return list.map(function (value) {
    return value[name]
}).filter(function (val) {
    return !!val;
});

но как-то это криво)

тогда так :
return list.reduce(function (data, value) {
    value[name] && data.push(value[name]);
    return data;
}, []);

tenshi 24.11.2012 15:47

reduce в данном случае имеет более сложную семантику, а так, да, можно и его. но я бы предпочёл всё же итераторы, чтобы иметь полный контроль над потоком исполнения.
к тому же, в более других случаях нужно обеспечивать ещё и уникальность значений в результирующем массиве, а для этого всё-равно нужно снаружи создавать хэшик для быстрого определения наличия значения.

FINoM 24.11.2012 19:30

Цитата:

Сообщение от tenshi
void function(){
    // ...
}()

Я понимаю, что ты взял первый попавшийся пример применения, но ты наверно не понял меня: для чего создан void? Мгновенный запуск анонимных функций можно реализовать еще несколькими методами.


Часовой пояс GMT +3, время: 06:35.