将多个对象合并为一个对象并合并JavaScript属性
将多个对象合并为一个对象并合并JavaScript属性
我在数组中有多个对象,我想合并具有相同id的所有对象,但是我也想合并一个属性的所有值(在这种情况下,是通道)
这是代码:
defaultArray = [
{
id: "FirstId",
name: "Some random name"
channels: [{
id: "Channel-ASD",
name: "Channel ASD"
}]
},
{
id: "FirstId",
name: "Some random name"
channels: [{
id: "Channel-QWE",
name: "Channel QWE"
}]
},
{
id: "SecondId",
name: "Some random name"
channels: [{
id: "Channel-QAZ",
name: "Channel QAZ"
}]
}
];
预期输出:
newArray = [
{
id: "FirstId",
name: "Some random name"
channels: [
{
id: "Channel-ASD",
name: "Channel ASD"
},
{
id: "Channel-QWE",
name: "Channel QWE"
}
]
},
{
id: "SecondId",
name: "Some random name"
channels: [{
id: "Channel-QAZ",
name: "Channel QAZ"
}]
}
]
回答如下:您需要研究filter
,map
,reduce
,some
,...
let defaultArray = [
{
id: "FirstId",
name: "Some random name",
channels: [{
id: "Channel-ASD",
name: "Channel ASD"
}]
},
{
id: "FirstId",
name: "Some random name",
channels: [{
id: "Channel-QWE",
name: "Channel QWE"
}]
},
{
id: "SecondId",
name: "Some random name",
channels: [{
id: "Channel-QAZ",
name: "Channel QAZ"
}]
}
];
let transformed= defaultArray.reduce((result, item, index, original)=>{
if (result.some(i=>i.id===item.id)) return result;
let channels = original.reduce((r,i)=>{
i.id===item.id && (r=[...r, ...i.channels]);
return r;
},[]);
result.push({
...item,
channels
});
return result;
},[]);
console.log(JSON.stringify(transformed,null,2));
最新文章
- Cocos Creator Layout组件
- #include<>和#include“”的区别
- 梯度下降法和最速下降法区别
- 文本长度过长时隐藏并显示省略号“...”,以及鼠标停留时悬浮显示全部文本(兼容IE)
- webview加载网页,tel协议不会调出拨号盘?该如何处理
- mmap例子详解
- VSS使用技巧
- Jmeter 之 Beanshell 用法
- Python爬虫
- CSS3实现图片的3D旋转效果
- 粒子群算法(PSO)优化最小二乘支持向量机回归预测,PSO
- 求绝对值最大值
- 父子组件间传值,父传子,子传父
- jsp中文传值到java乱码
- Linux直接在通过终端打开图片文件
- 学习LSSVM以及区别LSSVM和SVM看的几篇博文
- Qt数据库:(三)利用QSqlQuery类执行SQL语句(一)