首页 > 解决方案 > 根据属性将对象数组分解为一个新数组

问题描述

我必须转换一个数组,但我不知道该怎么做,任何人都可以帮助我吗?

我有这个数组:

[
  {clientid: 1, content: 'abc'},
  {clientid: 2, content: 'abc'},
  {clientid: 3, content: 'abc'},
  {clientid: 3, content: 'abc'},
  {clientid: 2, content: 'abc'},
  {clientid: 1, content: 'bcd'},
  {clientid: 2, content: 'abc'},
  {clientid: 1, content: 'def'},
  {clientid: 3, content: 'abc'}
]

我需要一个这样的数组:

[
  { clientid: 1, content: ['abc', 'bcd', 'def'] },
  { clientid: 2, content: ['abc', 'abc', 'abc'] },
  { clientid: 3, content: ['abc', 'abc', 'abc'] },

]

任何人都可以帮助我吗?

标签: javascriptnode.jsarrays

解决方案


这可以使用Array.prototype.reduce来完成。

const input = [
  {clientid: 1, content: 'abc'},
  {clientid: 2, content: 'abc'},
  {clientid: 3, content: 'abc'},
  {clientid: 3, content: 'abc'},
  {clientid: 2, content: 'abc'},
  {clientid: 1, content: 'bcd'},
  {clientid: 2, content: 'abc'},
  {clientid: 1, content: 'def'},
  {clientid: 3, content: 'abc'}
];

const groupBy = input.reduce((acc, cur) => {
  acc[cur.clientid] ? acc[cur.clientid].content.push(cur.content) : acc[cur.clientid] = {
    clientid: cur.clientid,
    content: [ cur.content ]
  };
  return acc;
}, {});
const output = Object.values(groupBy);
console.log(output);


推荐阅读