Функция лямбда (стрелка) Javascript возвращает объект в момент присвоения значения

1

Я просто удивляюсь, почему, когда я пытаюсь вернуть объект, когда я сразу присваиваю ему какое-то значение, результат не так, как я ожидал, и функция lamda не возвращает мне объект, а значение.

Чтобы уточнить мой вопрос, вот код:

1) Неверный вариант (но я хочу использовать что-то подобное, потому что это немного меньше)

const a = {
 "a" : "a",
 "b" : "b",
 "c" : "c"
}

const res = Object.keys(a).reduce((res, key) => ( res[key] = 0 ), {});
console.log(res) // result -> 0; but why, does it return an assigning value in that case?

2 вариант (правильный, но немного длинный)

const a = {
 "a" : "a",
 "b" : "b",
 "c" : "c"
}

const res = Object.keys(a).reduce((res, key) => { res[key] = 0; return res; }, {});
console.log(res); // { "a" : 0, "b" : 0, "c" : 0 }. It works properly now!

Может ли кто-нибудь помочь мне, пожалуйста, понять этот момент? Я верю, что это немного глупый вопрос, но в любом случае я буду очень признателен за любую информацию. Спасибо!

Теги:
lambda
expression
arrow-functions

1 ответ

6
Лучший ответ

Задания, такие как res[key] = 0 возвращают присвоенное значение - 0. Вам нужно вернуть res. Вы можете использовать оператор запятой для возврата последнего значения (res):

const a = {
 "a" : "a",
 "b" : "b",
 "c" : "c"
}

const res = Object.keys(a).reduce((res, key) => (res[key] = 0, res), {});
console.log(res)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню