Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не работает reduce (https://javascript.ru/forum/misc/83005-pochemu-ne-rabotaet-reduce.html)

lgick 24.08.2021 17:48

Почему не работает reduce
 
let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };

let users = [ vasya, petya, masha ]


let names = users.reduce((arr, user) => arr.push(user.name), [])

alert(names)


Я ожидал, что arr будет массивом имён, но при второй и последующих итерациях там undefined, а не массив

рони 24.08.2021 17:57

lgick,
где return arr?!!!

ksa 24.08.2021 17:57

Цитата:

Сообщение от lgick
Я ожидал, что arr будет массивом имён

Тогда логичнее так

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };

let users = [ vasya, petya, masha ]

let names = users.map(el => el.name)
alert(names)

рони 24.08.2021 17:59

lgick,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

lgick 24.08.2021 18:15

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };

let users = [ vasya, petya, masha ]


let names = users.reduce((arr, user) => {
arr.push(user.name)
return arr

}, [])

alert(names)




так работает, но я думал без "{", "}" и return тоже должно работать

рони 24.08.2021 18:33

Цитата:

Сообщение от lgick
думал без "{", "}"

можно и без {}, но возвращать arr нуно!
Оператор «запятая»

lgick 24.08.2021 18:47

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };

let users = [ vasya, petya, masha ]


let names = users.reduce((arr, user) => (arr.push(user.name), arr), [])

alert(names)



работает.

рони 24.08.2021 18:48

lgick,
/ добавьте

рони 24.08.2021 18:49

Цитата:

Сообщение от lgick
работает.

:dance:

lgick 24.08.2021 18:49

пытаюсь, нажимаю сохранить, а он не сохраняет)

рони 24.08.2021 18:50

lgick,
в расширенный режим перейдите и там сделайте правку

ksa 24.08.2021 18:50

Цитата:

Сообщение от lgick
работает

Какой тайный смысл использовать для преобразования массива reduce()?
Если для этого и сделан map().

рони 24.08.2021 18:52

lgick,
с форматированием ок!

ksa 24.08.2021 18:55

Цитата:

Сообщение от lgick
но я думал без "{", "}" и return тоже должно работать

Как еще одна альтернатива этому изврату... :D
let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };

let users = [ vasya, petya, masha ]

let names = users.reduce((arr, user) => arr.concat([user.name]), [])
alert(names)

Aetae 24.08.2021 19:02

ksa, вы делаете GC больно.

рони 24.08.2021 19:02

ksa,
:)
let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 28 };

let users = [ vasya, petya, masha ]

let names = Array.from(users, ({name}) => name)
alert(names)

Aetae 24.08.2021 19:06

import { map } from 'lodash';
let names = map(users, 'name');

ksa 24.08.2021 19:07

Цитата:

Сообщение от Aetae
вы делаете GC больно

Так я и написал что "изврат"... Но без return.

ksa 24.08.2021 19:09

Цитата:

Сообщение от рони
let names = Array.from(users, ({name}) => name)

Однозначно понятнее чем использование reduce()...

ksa 24.08.2021 19:11

Цитата:

Сообщение от Aetae
import { map } from 'lodash';

Чур без рук! (с) :D

Aetae 24.08.2021 19:16

ну если мы извращаемся, то ожно и так:
let names = users.reduce((arr, { name }) => arr.concat(name), [])

У нас же в name не окажется массива.)

Или так, чтоб движку совсем поплохело:
let names = users.reduce((arr, { name }) => [...arr, name], [])

ksa 24.08.2021 19:18

Столько всего понаделали массивам и не только... Старые, добрые циклы уже не в чести. :(

Aetae 24.08.2021 19:22

Ага, некоторые популярные стайлгайды вообще прямо говорят не юзать нормальные циклы в ползу методов.

Alexandroppolus 24.08.2021 20:24

Цитата:

Сообщение от Aetae
ksa, вы делаете GC больно.

асимптотика тоже не в восторге

ksa 24.08.2021 20:31

Вы уже запугали словами... :D
Один про Гранд Каньон, другой про арифметические функции загибает...


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