Javascript 多个嵌套级别数组的下划线
我有一个对象数组,我想把它转换成一个键值对的映射,以Javascript 多个嵌套级别数组的下划线,javascript,arrays,json,object,underscore.js,Javascript,Arrays,Json,Object,Underscore.js,我有一个对象数组,我想把它转换成一个键值对的映射,以id作为键。但是,我希望在根级别和recipes属性中都这样做 阵列resp: [ { "id": "1", "recipes": [ { "id": 4036 }, { "id": 4041 } ] }, { "id": "2", "recipes": [ { "id": 4052
id
作为键。但是,我希望在根级别和recipes
属性中都这样做
阵列resp
:
[
{
"id": "1",
"recipes": [
{
"id": 4036
},
{
"id": 4041
}
]
},
{
"id": "2",
"recipes": [
{
"id": 4052
},
{
"id": 4053
}
]
}
]
期望的结果
{
"1": {
"id": "1",
"recipes": {
"4036": {
"id": 4036
},
"4041": {
"id": 4041
}
}
},
"2": {
"id": "2",
"recipes": {
"4052": {
"id": 4052
},
"4053": {
"id": 4053
}
}
}
}
我知道如何通过以下功能使用lodash执行此操作: 使用下划线.js 然而,对于这个项目,我正在寻找一个优雅的解决方案,使用下划线来做同样的事情——让数组中嵌套的所有对象都使用
id
作为键。有人知道怎么做吗
谢谢
编辑:添加了所需的输出格式我将使用
数组。在响应和嵌套数组上减少。在配方上减少,以产生所需的结果。以下是一个es6示例:
resp.reduce((p, c) => {
p[c.id] = {
id: c.id,
recipes: c.recipes.reduce((r, cr) => {
r[cr.id] = { id: cr.id }
return r;
}, {})
}
return p;
}, {});
更详细的非es6版本:
var resp=[
{
“id”:“1”,
“食谱”:[
{
“id”:4036
},
{
“id”:4041
}
]
},
{
“id”:“2”,
“食谱”:[
{
“id”:4052
},
{
“id”:4053
}
]
}
]
var格式化=相应减少(函数(数据,电流){
数据[当前id]={
id:cur.id,
配方:cur.recipes.reduce(函数(recips,curRecip){
recips[curRecip.id]={id:curRecip.id}
回执;
}, {})
}
返回数据;
}, {});
console.log(格式化)
我会在响应上使用Array.reduce
,在配方上使用嵌套的Array.reduce
,以产生所需的结果。以下是一个es6示例:
resp.reduce((p, c) => {
p[c.id] = {
id: c.id,
recipes: c.recipes.reduce((r, cr) => {
r[cr.id] = { id: cr.id }
return r;
}, {})
}
return p;
}, {});
更详细的非es6版本:
var resp=[
{
“id”:“1”,
“食谱”:[
{
“id”:4036
},
{
“id”:4041
}
]
},
{
“id”:“2”,
“食谱”:[
{
“id”:4052
},
{
“id”:4053
}
]
}
]
var格式化=相应减少(函数(数据,电流){
数据[当前id]={
id:cur.id,
配方:cur.recipes.reduce(函数(recips,curRecip){
recips[curRecip.id]={id:curRecip.id}
回执;
}, {})
}
返回数据;
}, {});
console.log(格式化)代码>你能显示预期结果的结构吗?@hackerrdave我已经在上面添加了预期结果。你能显示预期结果的结构吗?@hackerrdave我已经在上面添加了预期结果