Javascript 循环遍历JSON对象并基于指定值返回键

Javascript 循环遍历JSON对象并基于指定值返回键,javascript,object,Javascript,Object,在与postman的api调用获得结果后,我试图在下面的成功函数中获得值“KC Content Kind id”的对应id,但由于它不是一个数组,我想知道每个id是否都能在jquery中工作,以及如何进行。我想通过进入facet对象来循环这个嵌套的json对象,如果name属性是“KC Content Kind ID”,那么返回对应name属性的ID "results": { "data": { "facets": { "60

在与postman的api调用获得结果后,我试图在下面的成功函数中获得值“KC Content Kind id”的对应id,但由于它不是一个数组,我想知道每个id是否都能在jquery中工作,以及如何进行。我想通过进入facet对象来循环这个嵌套的json对象,如果name属性是“KC Content Kind ID”,那么返回对应name属性的ID

    "results": {
       "data": {
          "facets": {
              "60749428": {
                "id": 60749428,
                "name": "KC Content Content Kind"
              },
              "60750276": {
                "id": 60750276,
                "name": "KC Content Product Version"
              },
              "69107204": {
               "id": 69107204,
               "name": "KC Video Audience"
              },
              "69127027": {
               "id": 69127027,
               "name": "KC Content Kind ID"
             }
          }
       }
    }
这是我的代码,我指的是success函数

function getAvailableKinds() {
$.ajax({
    url: csexe + "/api/v2/facets/" +getLocationId(),
    dataType: "json",
    type: "GET",
    beforeSend: function(xhr) {
        xhr.setRequestHeader ("OTCSticket", getAuthToken());
    },
    success: function(response) {
        var obj = response.results.data.facets;
        $.each(obj, function(item, value){
             if ( value.name == 'KC Content Kind ID') {
                 var idRequired = obj.id;
             }
        });
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert("An error occurred... Look at the console");
        $("body").html('<p>status code: '+jqXHR.status+'</p><p>Error Thrown: ' + errorThrown + '</p><p>Response Text:</p><div>'+jqXHR.responseText + '</div>');
    }
});
函数getAvailableKinds(){ $.ajax({ url:csexe+“/api/v2/facets/”+getLocationId(), 数据类型:“json”, 键入:“获取”, 发送前:函数(xhr){ setRequestHeader(“OTCSticket”,getAuthToken()); }, 成功:功能(响应){ var obj=response.results.data.facets; $。每个(对象、功能(项目、值){ 如果(value.name==“KC内容种类ID”){ var idRequired=对象id; } }); }, 错误:函数(jqXHR、textStatus、errorshown){ 警报(“发生错误…查看控制台”); $(“body”).html(“状态代码:”+jqXHR.status+”

抛出的错误:“+errorthround+”

响应文本:

”+jqXHR.responseText+”; } }); 您可以使用,然后使用基于测试的结果。例如:

let results={“data”:{“facets”:{“60749428”:{“id”:60749428,“name”:“KC内容种类”},“60750276”:{“id”:60750276,“name”:“KC内容产品版本”},“69107204”:{“id”:69107204,“name”:“KC视频观众”},“69127027”:{“id”:69127027,“name”:“KC
设obj=results.data.facets;
设k=Object.keys(obj).filter(key=>obj[key].name==“KC内容种类ID”)
//所有匹配项的数组
console.log(k)
如果您知道id是唯一的,那么您可以使用该id获取id,并查找该id,因为它将在第一次匹配时停止。这还将返回id以及对象的内容

const d={“data”:{“facets”:{“60749428”:{“id”:60749428,“name”:“KC内容种类”},“60750276”:{“id”:60750276,“name”:“KC内容产品版本”},“69107204”:{“id”:69107204,“name”:“KC视频观众”},“69127027”:{“id”:69127027,“name”:“KC
const r=Object.entries(d.data.facets.find)([k,v])=>v.name==“KC内容种类ID”)

console.log(r?r[0]:未定义)
您可以在facets对象上循环,并确定最后一个单词是否指向除
名称
以外的单独属性。如果它指向另一个属性,则返回该属性,如果不指向,则返回
名称

Object.values(obj).map(o => {
  let prop = o.name.split(" ").pop().toLowerCase();
  return (prop in o) ? o[prop] : o.name;
});
让apiResult={
“结果”:{
“数据”:{
“方面”:{
"60749428": {
“id”:60749428,
“名称”:“KC内容种类”
},
"60750276": {
“id”:60750276,
“名称”:“KC内容产品版本”
},
"69107204": {
“id”:69107204,
“名称”:“KC视频观众”
},
"69127027": {
“id”:69127027,
“名称”:“KC内容种类ID”
}
}
}
}
};
常量循环=(obj)=>Object.values(obj.map)(o=>{
让prop=o.name.split(“”.pop().toLowerCase();
返回(o中的prop)→o[prop]:o.name;
});

console.log(循环(apireult.results.data.facets));
如果要经常执行该操作,您可能会发现将数据重新构造为数组更容易使用

const results={“data”:{“facets”:{“60749428”:{“id”:60749428,“name”:“KC内容种类”},“60750276”:{“id”:60750276,“name”:“KC内容产品版本”},“69107204”:{“id”:69107204,“name”:“KC视频观众”},“69127027”:{“id”:69127027,“name”:“KC;
//获取刻面键的列表
constkeys=Object.keys(results.data.facets);
//将这些镶嵌面对象拉入阵列
const arr=keys.reduce((acc,key)=>acc.concat(results.data.facets[key]),[]);
//找到与所需名称匹配的对象,并返回id
const id=arr.find(el=>el.name==='KC内容种类id').id;

控制台日志(id)
因此,您希望最后一个单词(不管是什么)是对象上的查找属性,该对象的名称与文本的其余部分匹配?因此,我想说,如果在该结果对象中获取与“KC Content Kind id”匹配的“name”属性的“id”,则问题在于您的数据结构不良。面应该是一个数组f对象,而不是具有编号属性的对象。然后,您可以简单地使用数组方法定位正确的数据。实际上,在对数据执行任何操作之前,您必须将该数据转换为数组,即为每个操作添加一个步骤。