@StepsOnes

Как массив строк превратить в объект?

Есть такой массив:

let arr = ['utmTerm=java', 'utmTerm=javascript', 'utmTerm=swift']

Пытаюсь преобразовать в объект таким способом, добавляется только последний элемент массива, ошибку понимаю, но как сделать, чтобы циклом в объект добавлялись все элементы массива?

let obj = new Object();

res.forEach((item) => {
    for (let i = 0; i < res.length; i++) {
        obj[item.split('=')[0]] = item.split('=')[1];
    }
});

P.S ключи могут быть разные, плохой пример привел.
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
RAX7
@RAX7
const arr = ['utmTerm0=java', 'utmTerm1=javascript', 'utmTerm2=swift']
const obj = Object.fromEntries(arr.map(str => str.split('=', 2)));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@dGololobov
начинающий
Если вы хотите сделать объект где левая часть будет ключом (utmTerm) а правая значением, то никак.
Так как у вас получится объект с тремя одинаковыми полями, а такое js не обработать не сможет.

Но можно например сделать так:
const obj = arr.reduce((result, item) => {
    const [key, value] = item.split('=');
    if (!result[key]) {
        result[key] = [];
    }
    
     result[key].push(value);
   
    return result;
}, {})


Тогда итог будет:
{
    utmTerm: ['java', 'javascript', 'swift'],
}
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
const arr = ['utmTerm=java', 'utmTerm=javascript', 'utmTerm=swift'];
const res = arr.reduce((acc, item) => {
    const [key, value] = item.split('=', 2);
    (acc[key] ??= []).push(value);
    return acc;
}, {});
console.log(res);
Ответ написан
Комментировать
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
У вас ведь ключ в объекте один и тот же
Вы хотите с одним и тем же ключом добавить несколько значений?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 11:08
5000 руб./за проект
19 апр. 2024, в 10:59
150000 руб./за проект
19 апр. 2024, в 10:02
6000 руб./за проект