考虑以下对象
{
"objects": [
{
"body": "body 1",
"title": "Jolene",
"authors": [{
"name": "Dolly"
},
{
"name": "John"
}]
},
{
"body": "body 2",
"title": "Jolene",
"authors": [{
"name": "Dolly Parton"
}]
}
]
}
我的目标是验证每个对象的authors
属性,如果其中一个作者的name
满足条件,我希望它返回该对象的body
。
例如,我希望呈现对象的body
内容,该对象至少有一个authors
name
等于"John"
。在这种情况下,应该返回"body 1"
。
我尝试过映射和过滤,但我不知道如何深入每个对象来验证该条件,然后返回一个位于更高级别的属性。
请帮帮我!非常感谢!
发布于 2018-06-03 01:37:33
您可以使用find
搜索第一个匹配项。使用some
检查是否至少有一个名称匹配。
let obj={"objects":[{"body":"body 1","title":"Jolene","authors":[{"name":"Dolly"},{"name":"John"}]},{"body":"body 2","title":"Jolene","authors":[{"name":"Dolly Parton"}]}]}
let toSearch = "John";
let result = (obj.objects.find(o => o.authors.some(x => x.name === toSearch)) || {body: ""}).body;
console.log(result);
如果需要多个匹配项,可以使用filter
和map
let obj={"objects":[{"body":"body 1","title":"Jolene","authors":[{"name":"Dolly"},{"name":"John"}]},{"body":"body 1.5","title":"Jolene","authors":[{"name":"Dolly"},{"name":"John"}]},{"body":"body 2","title":"Jolene","authors":[{"name":"Dolly Parton"}]}]}
let toSearch = "John";
let result = obj.objects.filter(o => o.authors.some(x => x.name === toSearch)).map(o => o.body);
console.log(result);
发布于 2018-06-03 01:37:16
这看起来可能有点小问题,但您肯定得到了解决方案
var obj = {
"objects": [
{
"body": "body 1",
"title": "Jolene",
"authors": [{
"name": "Dolly"
},
{
"name": "John"
}]
},
{
"body": "body 2",
"title": "Jolene",
"authors": [{
"name": "Dolly Parton"
}]
}
]
}
obj["objects"].forEach(item=>{
if(item.authors){
item.authors.forEach(items=>{
if(items.name == 'Dolly') console.log(item['body'])
})
}
})
https://stackoverflow.com/questions/50659470
复制相似问题