Преобразование каждого элемента в массиве в объект - PullRequest
0 голосов
/ 14 декабря 2018

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

const x = ["a", "b", "c"];

// expected result
{
  "a": {"foo": "bar"},
  "b": {"foo": "bar"},
  "c": {"foo": "bar"},
}

Ответы [ 4 ]

0 голосов
/ 15 декабря 2018

lodash 1:

Вы можете использовать _.zipObject() с Array.map():

const data = ["a", "b", "c"];

const result = _.zipObject(data, data.map(() => ({ for: 'bar' })));
 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Lodash 2:

Вы можете использовать Array.reduce() с _.set():

const data = ["a", "b", "c"];

const result = data.reduce((r, c) => _.set(r, `${c}.foo`, 'bar'), {});
 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 14 декабря 2018

Вы можете сопоставить новые объекты с требуемым ключом и назначить одному объекту.

const
    x = ["a", "b", "c"],
    object = Object.assign(...x.map(k => ({ [k]: { foo: "bar" } })));

console.log(object);
0 голосов
/ 14 декабря 2018
    const x = ["a", "b", "c"];    
    const transformedObject = x.reduce((acc, el) => {acc[el] = {"foo": "bar"}; return acc}, {})

    console.log(transformedObject);
0 голосов
/ 14 декабря 2018

Вы можете использовать Array#reduce()

const x = ["a", "b", "c"];

const res = x.reduce((a,c)=> (a[c] = {foo:'bar'},a) , {})

console.log(res)
...