javascript - 根据属性将对象数组分解为一个新数组
问题描述
我必须转换一个数组,但我不知道该怎么做,任何人都可以帮助我吗?
我有这个数组:
[
{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'] },
]
任何人都可以帮助我吗?
解决方案
这可以使用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);
推荐阅读
- html - 如何查看列表标签的数量
- css - CSS - 使居中的文本看起来像打字机
- arduino - 使用 Ethernet Shield 在多个 Arduino 板之间发送和接收数据的最佳方式是什么?
- python - 查找列表的总和
- java - Java checkstyle:如果方法名称包含Y,则检查返回类型是否为X
- system-verilog - 我正在为一个模拟原理图的模块编写一个 SystemVerilog 测试台,但不知道为什么脚本窗口说没有连接到端口 Y?
- python - 该网站的新版本是否有任何 Instagram Web API?
- python - 如何在 Python 3 单元测试中模拟“with connect”SQL 查询?
- python - 尝试使用 PyFakeWebcam 时出现 IOError
- excel - 不确定如何正确执行此计数功能