如何挖掘一个对象来满足条件并返回上面的级别的属性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (43)

考虑以下对象

{
"objects": [
    {
        "body": "body 1", 
        "title": "Jolene", 
        "authors": [{
            "name": "Dolly"
        },
        {
            "name": "John"
        }]
    },
    {
        "body": "body 2", 
        "title": "Jolene", 
        "authors": [{
            "name": "Dolly Parton"
        }]
    }
]
}

我的目标是验证每个对象authors属性,如果其中一个作者name符合我希望它返回该body对象的条件。

我已经尝试过映射和过滤,但我无法弄清楚如何挖掘每个对象来验证条件,然后返回一个更高级别的属性。

提问于
用户回答回答于

可以使用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);

如果你想要多个匹配,你可以使用filtermap

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);
用户回答回答于

这可能看起来有点小问题,但你肯定能找到解决办法。

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'])
      })
	}
})

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问5 回答
  • o o

    4 粉丝495 提问5 回答
  • 找虫虫

    5 粉丝0 提问4 回答
  • 人生的旅途

    10 粉丝484 提问4 回答

扫码关注云+社区

领取腾讯云代金券