Sta*_*ddy 5 javascript arrays json node.js
我是新手JS。我有一个如下所示的对象列表,
var a = [
{
wa_id: 1,
wa_property_id: 'p1',
wa_view_name: 'ram'
},
{
wa_id: 1,
wa_property_id: 'p1',
wa_view_name: 'sam'
},
{
wa_id: 1,
wa_property_id: 'p2',
wa_view_name: 'kam'
},
{
wa_id: 2,
wa_property_id: 'p5',
wa_view_name: 'pri'
},
{
wa_id: 1,
wa_property_id: 'p3',
wa_view_name: 'ste',
},
]
Run Code Online (Sandbox Code Playgroud)
我想遍历这些对象并创建一个新的单独对象。我想要如下所需的输出
所需输出:
{
"1": {
"p1": ["ram", "sam"],
"p2": ["kam"],
"p3": ["ste"]
},
"2": {
"p5": ["pri"]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我试过的代码,
var a = [
{
wa_id: 1,
wa_property_id: 'p1',
wa_view_name: 'ram'
},
{
wa_id: 1,
wa_property_id: 'p1',
wa_view_name: 'sam'
},
{
wa_id: 1,
wa_property_id: 'p2',
wa_view_name: 'kam'
},
{
wa_id: 2,
wa_property_id: 'p5',
wa_view_name: 'pri'
},
{
wa_id: 1,
wa_property_id: 'p3',
wa_view_name: 'ste',
},
]
Run Code Online (Sandbox Code Playgroud)
您可以尝试将数组减少为对象
var a = [
{
wa_id: 1,
wa_property_id: 'p1',
wa_view_name: 'ram'
},
{
wa_id: 1,
wa_property_id: 'p1',
wa_view_name: 'sam'
},
{
wa_id: 1,
wa_property_id: 'p2',
wa_view_name: 'kam'
},
{
wa_id: 2,
wa_property_id: 'p5',
wa_view_name: 'pri'
},
{
wa_id: 1,
wa_property_id: 'p3',
wa_view_name: 'ste',
},
]
let result = a.reduce((acc,rec) =>{
//if result object doesn't contain key for wa_id - add new id key
if(!(Object.keys(acc).includes(rec.wa_id.toString())))
{
return {...acc, [rec.wa_id]: {[rec.wa_property_id]:[rec.wa_view_name]}}
}
//if result id object doesn't contain key for property - add new property key
if(!(Object.keys(acc[rec.wa_id]).includes(rec.wa_property_id.toString())))
{
acc[rec.wa_id] = {...acc[rec.wa_id],[rec.wa_property_id]:[rec.wa_view_name] }
return acc
}
//otherwise add new value to array of properties
acc[rec.wa_id][rec.wa_property_id] = [...acc[rec.wa_id][rec.wa_property_id], rec.wa_view_name]
return acc
},{})
console.log(result)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |