【问题标题】:Get Specific JSON Object by ID from array and return the JSON object (Javascript/JQuery)通过 ID 从数组中获取特定 JSON 对象并返回 JSON 对象(Javascript/JQuery)
【发布时间】:2020-05-30 09:29:00
【问题描述】:

我正在尝试使用 JavaScript 从对象数组中提取特定的 JSON 对象。这是我的 JSON:

"Awards": [
   {
     "Award1": {
        "title": "Award1 Title",
        "recipient": "John Doe",
        "description": "Blah Blah Blah"
     }
   },
   {
     "Award2": {
        "title": "Award2 Title",
        "recipient": "Tom White",
        "description": "Blah Blah Blah"
     }
   },
   {
      "Award3": {
         "title": "Award3 Title",
         "recipient": "Will Biggs",
         "description": "Blah Blah Blah"
      }
   }
]

我想要做的是创建一个函数,该函数接收数据和一个 id,在数组中找到对象并将对象作为一个整体返回。例如,如果我搜索 Award1,我希望它返回:

var obj = {
 "title": "Award1 Title",
 "recipient": "John Doe",
 "description": "Blah Blah Blah"
}

那么我可以像这样访问数据:

obj.recipient // Which would return John Doe

想法?

【问题讨论】:

    标签: javascript jquery arrays json


    【解决方案1】:

    查找包含属性 key=Award1 的第一个对象并返回它。

    const findKey = (list, key)=>(list.find(obj=>obj[key])||{})[key]
    
    data = {
    "Awards": [
       {
         "Award1": {
            "title": "Award1 Title",
            "recipient": "John Doe",
            "description": "Blah Blah Blah"
         }
       },
       {
         "Award2": {
            "title": "Award2 Title",
            "recipient": "Tom White",
            "description": "Blah Blah Blah"
         }
       },
       {
          "Award3": {
             "title": "Award3 Title",
             "recipient": "Will Biggs",
             "description": "Blah Blah Blah"
          }
       }
    ]
    }
    
    console.log(data.Awards.find(obj=>obj["Award1"]))
    
    let key = "Award1"
    console.log(data.Awards.find(obj=>obj[key])[key].title)
    
    console.log(
    findKey(data.Awards,'Award1')
    )
    
    console.log(
    findKey(data.Awards,'Award2')
    )
    
    console.log(
    findKey(data.Awards,'Award3')
    )

    【讨论】:

    • 这个答案很接近,问题是一旦它被提取出来,它就是一个对象和对象。因此我不能说例如:obj.title,因为它会寻找一个名为title的字段,但对象中只有一个字段,即另一个对象的id。 (至少据我所知,像 obj.[key].title 这样的东西不存在)
    • obj[key].titleObject.values(obj)[0].titleobj[Object.keys(obj)[0]].title
    【解决方案2】:

    这应该可以解决问题:

    var obj=Awards['Award1'];
    

    但请记住,这只是一个引用副本,即。 e.对obj 的更改也将发生在原始Awards 对象上。

    实际上并没有必要为它创建一个函数,但当然,你也可以这样做:

    function getObj(parent,key){
      return parent[key];
    }
    
    var obj=getObj (Awards,'Award1');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2017-07-03
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多