исполльзуя reduce преобразовать список в словарь

181
21 июля 2021, 20:20

Есть обычный список с цифрами.

[1,2]

Я хочу, используя reduce вернуть словарь, вида

{'key1': 1, 'key2': 2}

то есть

[1,2].reduce(myFunc) ====> {'key1': 1, 'key2': 2}

Для этого нужно написать функцию myFunc
Проблема в том, что я не могу осознать, как использовать значение в редюс, куда все будет прибавляться.
Мои не удачные попытки:

function myFunc(total, num, index) {
  return `{key${num}: ${num}}`;
}

ну это вернет самый последний результат, ну это и логично, так как total не используется. Убираем индекс - он не нужен нам и добавляем тотал.

function myFunc(total, num) {
  return total[`{key${num}`] = `${num}}`
}

Это не рабочий вариант.

function myFunc(total, num) {
  return {}, `{key${num}: ${num}}`;
}

Как и этот.

Объясните мне, пожалуйста, что я делаю не так.
Спасибо.

Answer 1
function myFunc(total, num) {
  return total[`{key${num}`] = `${num}}`
}

Вы были так близки. Функция, которая передает в reduce должно возвращать общий результат, а не конкретный для какой-то итерации.

// Это не вернет весь объект total, в этом и проблема.
total[`{key${num}`] = `${num}}`

const data = [1, 2]; 
const result = data.reduce((acc, el) => { 
  acc[`key${el}`] = el; 
 
  return acc; // Возвращаем именно acc. 
}, {}); // Последний аргумент - начальное значение acc. 
 
console.log(result);

READ ALSO
Не работает canvas в JavaScript

Не работает canvas в JavaScript

Пытался отрисовать картинку и ничегоПопробовал линию

170
Как заменить атрибут Jquery

Как заменить атрибут Jquery

В чем суть вопроса: На сайте есть 5 карточек товаров, в каждой из которой есть кнопка "заказать"После нажатия кнопки появляется модальное окно...

207
Then выполняется раньше When

Then выполняется раньше When

я имею код файл feature:

186
Выделение и удаление полигонов на canvas

Выделение и удаление полигонов на canvas

Есть задача позволить пользователю выборочно выделять и удалять полигоны которые он рисуетПроблема 1: как выделить нужный полигон из возможного...

476