Javascript 使用基于嵌套值的数组筛选对象数组以提取特定字段

Javascript 使用基于嵌套值的数组筛选对象数组以提取特定字段,javascript,filter,Javascript,Filter,与…有关的问题 var mainArray=[{“name”:“George”, “nest”:[{“id”:1,“age”:11},{“id”:2,“age”:22}]}, {“姓名”:“乔治”, “巢”:[{“id”:2,“age”:34}]}, {“姓名”:“Raghu”, “巢”:[{“id”:3,“age”:45}]}, {“name”:“Sudhir”, “巢”:[{“id”:4,“年龄”:23}]}]; var filteredegorge=mainArray.filter(el

与…有关的问题

var mainArray=[{“name”:“George”,
“nest”:[{“id”:1,“age”:11},{“id”:2,“age”:22}]},
{“姓名”:“乔治”,
“巢”:[{“id”:2,“age”:34}]},
{“姓名”:“Raghu”,
“巢”:[{“id”:3,“age”:45}]},
{“name”:“Sudhir”,
“巢”:[{“id”:4,“年龄”:23}]}];
var filteredegorge=mainArray.filter(element=>element.name==“George”)
var final=filteredGeorge.map(element=>({“name”:element.name,“id”:element.nest.filter(element=>element.age==22)}))

log(final)
您可以通过对数组的map方法应用一个函数来实现,该方法还可以使用检查嵌套数组的年龄。由于函数返回undefined作为不匹配的条目,它需要在以后去掉这些条目。这里使用
.find(Boolean)

这不是一种美,但我希望它能帮助你:

var mainArray=[{
“姓名”:“乔治”,
'nest':[{'id':1,'age':11},{'id':2,'age':22}],
},
{
“姓名”:“乔治”,
'nest':[{'id':2,'age':34}],
},
{
“name”:“Raghu”,
'nest':[{'id':3,'age':45}],
},
{
“name”:“Sudhir”,
'nest':[{'id':4,'age':23}],
}];
var george22=mainArray.map((条目)=>{
如果(entry.name!==“George”)
返回;
var nested=entry.nest.find((nested)=>nested.age==22);
如果(!嵌套)
返回;
返回{name:entry.name,id:nested.id};
}).find(布尔值);

控制台日志(george22)您可以通过对数组的map方法应用一个函数来实现,该方法还可以使用检查嵌套数组的年龄。由于函数返回undefined作为不匹配的条目,它需要在以后去掉这些条目。这里使用
.find(Boolean)

这不是一种美,但我希望它能帮助你:

var mainArray=[{
“姓名”:“乔治”,
'nest':[{'id':1,'age':11},{'id':2,'age':22}],
},
{
“姓名”:“乔治”,
'nest':[{'id':2,'age':34}],
},
{
“name”:“Raghu”,
'nest':[{'id':3,'age':45}],
},
{
“name”:“Sudhir”,
'nest':[{'id':4,'age':23}],
}];
var george22=mainArray.map((条目)=>{
如果(entry.name!==“George”)
返回;
var nested=entry.nest.find((nested)=>nested.age==22);
如果(!嵌套)
返回;
返回{name:entry.name,id:nested.id};
}).find(布尔值);

控制台日志(george22)考虑到预期输出的描述,我猜您正在寻找基于多个条件匹配的单个匹配记录

如果是,您可以检查源数组记录是否满足这两个要求,并相应地分配输出对象的要求属性(
name
id
):

const src=[{“name”:“George”,“nest”:[{“id”:1,“age”:11},{“id”:2,“age”:22}]},{“name”:“George”,“nest”:[{“id”:2,“age”:34}]},{“name”:“Raghu”,“nest”:[{“id”:3,“age”:45}}},{“name”:“Sudhir”,“nest”:[{“id”:4,“age”:23}]},
getItemByNameAndAge=(arr,_name,_age)=>{
让name=null,id=null
src.some(o=>
o、 name==\u name&&
o、 nest.some(n=>
n、 年龄==\u年龄?
(id=n.id,name=\u name,true):
假的
)
)
返回{name,id}
}
log(getItemByName和age(src,'George',22))

.as console wrapper{min height:100%;}
考虑到预期输出的描述,我猜您正在寻找基于多个条件匹配的单个匹配记录

如果是,您可以检查源数组记录是否满足这两个要求,并相应地分配输出对象的要求属性(
name
id
):

const src=[{“name”:“George”,“nest”:[{“id”:1,“age”:11},{“id”:2,“age”:22}]},{“name”:“George”,“nest”:[{“id”:2,“age”:34}]},{“name”:“Raghu”,“nest”:[{“id”:3,“age”:45}}},{“name”:“Sudhir”,“nest”:[{“id”:4,“age”:23}]},
getItemByNameAndAge=(arr,_name,_age)=>{
让name=null,id=null
src.some(o=>
o、 name==\u name&&
o、 nest.some(n=>
n、 年龄==\u年龄?
(id=n.id,name=\u name,true):
假的
)
)
返回{name,id}
}
log(getItemByName和age(src,'George',22))

.as控制台包装{minheight:100%;}
这里是使用map的另一种方法

var mainArray=[{“name”:“George”,
“nest”:[{“id”:1,“age”:11},{“id”:2,“age”:22}]},
{“姓名”:“乔治”,
“巢”:[{“id”:2,“age”:34}]},
{“姓名”:“Raghu”,
“巢”:[{“id”:3,“age”:45}]},
{“name”:“Sudhir”,
“巢”:[{“id”:4,“年龄”:23}]}]
res=mainArray.map({…rest})=>({…rest,“nest”:rest.nest.length>1?rest.nest[rest.nest.length-1].id:rest.nest[0].id}))

log(res)
这里是使用map的另一种方法

var mainArray=[{“name”:“George”,
“nest”:[{“id”:1,“age”:11},{“id”:2,“age”:22}]},
{“姓名”:“乔治”,
“巢”:[{“id”:2,“age”:34}]},
{“姓名”:“Raghu”,
“巢”:[{“id”:3,“age”:45}]},
{“name”:“Sudhir”,
“巢”:[{“id”:4,“年龄”:23}]}]
res=mainArray.map({…rest})=>({…rest,“nest”:rest.nest.length>1?rest.nest[rest.nest.length-1].id:rest.nest[0].id}))

console.log(res)
如果有多个项目同名怎么办?如果有多个项目同名怎么办?在所有答案中,我喜欢这个t