如果某个键使用JavaScript相同,则从另一个数组构建数组
我有一组数据。数组中的某些键是相同的。我想基于键创建一个新数组,并添加其他数据 这是我的阵列如果某个键使用JavaScript相同,则从另一个数组构建数组,javascript,Javascript,我有一组数据。数组中的某些键是相同的。我想基于键创建一个新数组,并添加其他数据 这是我的阵列 var myObjOne = [ { "name":"John", "id":1, "car":"maruti" }, { "name":"John", "id":2, "car":"wolks" }, { "name"
var myObjOne = [
{
"name":"John",
"id":1,
"car":"maruti"
},
{
"name":"John",
"id":2,
"car":"wolks"
},
{
"name":"John",
"id":3,
"car":"bmw"
},
{
"name":"Peter",
"id":4,
"car":"alto"
},
{
"name":"Peter",
"id":5,
"car":"swift"
}
];
我想将数组转换为以下格式
var myObj = [
{
"name":"John",
"items": [
{ "id":1, "car":"maruti" },
{ "id":2, "car":"wolks" },
{ "id":3, "car":"bmw" }
]},
{
"name":"Peter",
"items": [
{ "id":4, "car":"alto" },
{ "id":5, "car":"swift" },
]
}
];
我正在处理节点环境。使用
。将简化为按名称分组,并使用。在简化程序中查找,以查找是否已添加匹配的名称:
const input=[{“name”:“John”,“id”:1,“car”:“maruti”},{“name”:“John”,“id”:2,“car”:“wolks”},{“name”:“John”,“id”:3,“car”:“bmw”},{“name”:“Peter”,“id”:4,“cars”:“alto”},{“name”:“Peter”,“id”:5,“cars”:“swift”}]
const output=input.reduce((a,{name,…item})=>{
const foundNameObj=a.find(nameObj=>nameObj.name==name);
if(foundNameObj)foundNameObj.items.push(item);
else a.push({name,items:[item]});
返回a;
}, []);
控制台日志(输出)代码>您可以先使用映射名称和项目的对象创建对象,然后使用循环在中间映射上循环创建最终数组:
var source=[{“name”:“John”,“id”:1,“car”:“maruti”},{“name”:“John”,“id”:2,“car”:“wolks”},{“name”:“John”,“id”:3,“car”:“bmw”},{“name”:“Peter”,“id”:4,“cars”:“alto”},{“name”:“Peter”,“id”:5,“cars”:“swift”};
const map=source.reduce((acc,{name,{obj})=>{
如果(!acc[名称]){
acc[名称]=[];
}
acc[名称].推送(obj);
返回acc;
}, {});
常量结果=[];
for(让Object.entries的[名称,项](map)){
push({name,items});
}
控制台日志(结果)
Array.reduce处于救援状态。此方法接受累加器
和当前
项目。检查累加器中是否存在name属性值为John或Peter的对象
var myObjOne=[{
“姓名”:“约翰”,
“id”:1,
“汽车”:“马鲁蒂”
},
{
“姓名”:“约翰”,
“id”:2,
“汽车”:“沃尔克斯”
},
{
“姓名”:“约翰”,
“id”:3,
“汽车”:“宝马”
},
{
“姓名”:“彼得”,
“id”:4,
“汽车”:“中音”
},
{
“姓名”:“彼得”,
“id”:5,
“汽车”:“斯威夫特”
}
];
var newObj=myObjOne.reduce(函数(acc、curr、currendex){
//使用findIndex检查是否存在对象
//其中name属性的值为John,Peter
//如果它存在,它将返回索引,否则它将返回-1
让ifNameExist=acc.findIndex(函数(项){
return item.name==curr.name;
})
//如果为-1,则创建一个具有name和item属性的对象,并按
//将其连接到蓄能器
如果(ifNameExist===-1){
设nameObj={};
nameObj.name=curr.name;
nameObj.items=[];
nameObj.items.push({
id:curr.id,
汽车:现车
})
附件推送(名称OBJ)
}否则{
//如果这样的对象已经存在,那么只需更新项目数组
acc[ifNameExist].items.push({
id:curr.id,
汽车:现车
})
}
返回acc;
}, []);
console.log(newObj)
请向我们展示您已经尝试过的功能。我们将很乐意帮助您解决您的解决方案中的问题,但这不是免费的编码服务。