Array> Object: как индексировать массив объектов с помощью Redu, пропуская индекс из вложенного элемента в результате (es2017)? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть такой массив:

const peopleArray = [
    {
        "id": "Antoine",
        "country": "France"
    },
    {
        "id": "Alejandro",
        "country": "Spain"
    }
]

То, что я хотел бы представить как на объекте, как этот (обратите внимание, что id не является свойством):

{
    "Antoine": {
        "country": "France"

    },
    "Alejandro": {
        "country": "Spain"
    }
}

Итакпока я нашел, что я могу сделать это (элегантно!):

peopleArray.reduce( (ac, p) => ({...ac, [p.id]: p }), {} )

, который производит:

{
    "Antoine": {
        "id": "Antoine",
        "country": "France"

    },
    "Alejandro": {
        "id": "Alejandro",
        "country": "Spain"
    }
}

Я в недоумении, как сделать то же самое в краткой форме/ изящный способ, так что id опущен.

Ищите чистое решение javascript es2017, которое работает с Node.js версии 8.11.1.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если вы хотите создать и объект с id в качестве ключа и оставшийся объект как value.Вы можете попробовать следующие действия, используя Параметры отдыха

ES2017

const peopleArray = [{"id": "Antoine","country": "France"},{"id": "Alejandro","country": "Spain"}];

const result = peopleArray.reduce( (ac, o) => { 
  ac[o.id] = Object.assign({}, o); 
  delete ac[o.id].id; 
  return ac; 
}, {});
console.log(result);

ES2018 - сможет использовать параметры отдыха для объектов

const peopleArray = [{"id": "Antoine","country": "France"},{"id": "Alejandro","country": "Spain"}];

const result = peopleArray.reduce( (ac, {id, ...rest}) => Object.assign(ac, {[id]: rest}), {} );
console.log(result);
0 голосов
/ 23 октября 2018

Вы можете сделать: peopleArray.reduce( (ac, p) => ({...ac, [p.id]: { country : p.country } }), {} )

...