[英]Group items by common property in array of objects
我正在寻找一种有效的方法来重新排列 JS 中的对象数组。 我需要将每个对象的两个参数组合成一个对象,其中gwdetailsid
值相同。
初始数组:
{
"data": [
{
"gwdetailsid": "gw1",
"gwpname": "username",
"gwpvalue": "transalis"
},
{
"gwdetailsid": "gw1",
"gwpname": "password",
"gwpvalue": "secure_password@1"
},
{
"gwdetailsid": "gw2",
"gwpname": "username",
"gwpvalue": "tesco"
},
{
"gwdetailsid": "gw2",
"gwpname": "password",
"gwpvalue": "lemon_farmer_2"
}
]
}
所需的输出数组:
{
"gateways": [
{
"gwdetailsid": "gw1",
"username": "transalis",
"password": "secure_password@1"
},
{
"gwdetailsid": "gw2",
"username": "tesco",
"password": "lemon_farmer_2"
}
]
}
实际上,您的任务归结为将data
数组转换为gateways
数组。
您可以使用Array.prototype.reduce()
来完成这种工作,以gwdetailsid
属性作为键来构建Map
,然后提取该Map
.values()
:
const data = [{gwdetailsid:"gw1",gwpname:"username",gwpvalue:"transalis"},{gwdetailsid:"gw1",gwpname:"password",gwpvalue:"secure_password@1"},{gwdetailsid:"gw2",gwpname:"username",gwpvalue:"tesco"},{gwdetailsid:"gw2",gwpname:"password",gwpvalue:"lemon_farmer_2"}], gateways = [...data .reduce((acc, {gwdetailsid, gwpname, gwpvalue} ) => { const group = acc.get(gwdetailsid) group ? group[gwpname] = gwpvalue : acc.set(gwdetailsid, {gwdetailsid, [gwpname]: gwpvalue}) return acc }, new Map) .values() ] console.log(gateways)
.as-console-wrapper{min-height:100%;}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.