Преобразовать javascript массив объекта в объект с ключами - PullRequest
0 голосов
/ 22 января 2020

Вот что у меня есть:

const datas = [
  {id: '/chiens', content: ['waf1','waf2']},
  {id: '/chats', content: ['miaou1','miaou2']},
  {id: '/oiseaux', content: ['cui1','cui2']}
]

Вот что я хочу:

const datasFiltered = {
   chiens : ['waf1','waf2'],
   chats : ['miaou1','miaou2'],
   oiseaux : ['cui1','cui2']
}

Как я могу это сделать? С reduce может быть?

Спасибо за вашу помощь!

Ответы [ 6 ]

0 голосов
/ 22 января 2020

Вы можете сделать это, как показано ниже

[
    { id: '/chiens', content: ['waf1', 'waf2'] },
    { id: '/chats', content: ['miaou1', 'miaou2'] },
    { id: '/oiseaux', content: ['cui1', 'cui2'] },
].reduce((acc, ele) => {
    const newContent = (acc[ele.id.replace('/', '')] = ele.content);
    return { ...acc, newContent };
}, {});
0 голосов
/ 22 января 2020

Вы также можете использовать forEach для достижения этой цели.

const datas = [
  {id: '/chiens', content: ['waf1','waf2']},
  {id: '/chats', content: ['miaou1','miaou2']},
  {id: '/oiseaux', content: ['cui1','cui2']}
]

const result = {};
datas.forEach((el) => {
  const key = el.id.substring(1,(el.id.length));
  result[key] = el.content;
});

console.log(result)
0 голосов
/ 22 января 2020

Сопоставить массив с массивом записей [ключ, значение] и преобразовать в объект с помощью Object.fromEntries():

const datas = [
  { id: "/chiens", content: ["waf1", "waf2"] },
  { id: "/chats", content: ["miaou1", "miaou2"] },
  { id: "/oiseaux", content: ["cui1", "cui2"] }
];

const result = Object.fromEntries(datas.map(({ id, content }) => [
  id.replace('/', ''),
  content
]));

console.log(result);
0 голосов
/ 22 января 2020

Вы должны создать новый объект на основе вашего массива данных, например,

    let newObj = {};    
    datas.foreach(item => {
    newObj[item['id']] = item['content'];  
    })
0 голосов
/ 22 января 2020

Вот пример кода.

const datas = [
  { id: "/chiens", content: ["waf1", "waf2"] },
  { id: "/chats", content: ["miaou1", "miaou2"] },
  { id: "/oiseaux", content: ["cui1", "cui2"] }
];

const updated = datas.reduce(
  (acc, curr) => ({
    ...acc,
    [curr.id.split("/")[1]]: curr.content,
    // alternatively
    // [curr.id.slice(1)]: curr.content
  }),
  {}
);

console.log(updated);
0 голосов
/ 22 января 2020

Вы можете использовать функцию reduce для создания желаемого результата.

const datas = [{id: '/chiens', content: ['waf1','waf2']},{id: '/chats', content: ['miaou1','miaou2']},{id: '/oiseaux', content: ['cui1','cui2']}],
      datasFiltered = datas.reduce((a, {id: [_, ...key], content}) => Object.assign(a, {[key.join("")]: content}), Object.create(null));

console.log(datasFiltered);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...