@karolina1029

Как элементы массива сделать значениями объекта?

Дан следующий массив:

let arr = ['a', 'b', 'c', 'd', 'e'];

Создайте из этого массива следующий объект:

let arr = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'};

Мое решение:

let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = {};
for (let i = 0; i <= arr.length; i++) {
    obj[i + 1] += arr;
}
console.log(obj);
  • Вопрос задан
  • 535 просмотров
Решения вопроса 3
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Мое решение:

let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = {};
for (let i = 0; i <= arr.length; i++) {
obj[i + 1] += arr;
}
console.log(obj);


Ну Вы были относительно близко.
1. Зачем Вы делаете += ? Вы же не плюсуете к чему то, а назначаете значение. То есть
- obj[i + 1] += arr;
+ obj[i + 1] = arr;

2. Зачем Вы прибавляете весь arr, когда Вам нужен элемент массива, а не весь массив. То есть:
- obj[i + 1] = arr;
+ obj[i + 1] = arr[i];

3. Цикл выполнится 6 раз, так как у Вас от нуля до длины массива - 5. То есть, 0,1,2,3,4,5. Вместо этого можно начать с 1, и в итоге тогда:
let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = {};
for (let i = 1; i <= arr.length; i++) {
obj[i] = arr[i-1];
}
console.log(obj);


Ну и как уже сказали выше, можно через reduce. Тогда будет значительно короче:
let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = arr.reduce((a, c, i) =>  (a[i+1] = c, a), {});
console.log(obj);
Ответ написан
Комментировать
@zkrvndm
Софт для автоматизации
Используйте лучше reduce:
let arr = ['a', 'b', 'c', 'd', 'e'];
let obj = arr.reduce((a, v, i) => { a[i+1] = v; return a; }, {});

console.log(obj);

Почему его? Ну он сразу возвращает значение, это удобно.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Короткий способ: создание объекта из пар [ключ, значение] методом fromEntries():
Object.fromEntries(arr.map((v, i) => [i + 1, v]))

как это работает
Из исходного массива методом map() создаётся новый, где каждый элемент это тоже массив:
[ [1, 'a'], [2, 'b'], ... ]
Такой массив массивов годится для передачи в Object.fromEntries() для получения искомого объекта.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект