Javascript 使用标识符遍历JSON对象并使用标识符获取特定值

Javascript 使用标识符遍历JSON对象并使用标识符获取特定值,javascript,arrays,json,object,Javascript,Arrays,Json,Object,遍历包含嵌套数组对象的JSON对象。 提供了标签值,该值是需要返回相关级别指标值的标识符。如果在第二级中找到标签,请在第二级中找到度量,并应将其返回 我无法获得如何遍历对象并返回特定值的逻辑 function getMetrics(arr, label) { for (let i = 0; i < arr.length; i++) { if (arr[i].label === label) { return arr[i].metricsValue; } e

遍历包含嵌套数组对象的JSON对象。 提供了标签值,该值是需要返回相关级别指标值的标识符。如果在第二级中找到标签,请在第二级中找到度量,并应将其返回

我无法获得如何遍历对象并返回特定值的逻辑

function getMetrics(arr, label) {

  for (let i = 0; i < arr.length; i++) {
    if (arr[i].label === label) {
      return arr[i].metricsValue;
    } else if (arr[i].children) {
      return getMetrics(arr[i].children, label);
    }
  }

  return "Not found";
}
const selectedMetrics = getMetrics(dataObj.series, '1');
预期结果: 当输入为“1”时,应返回

selectedMetrics= "m1"
输入:“A-B-C-D”


您正在传递值,因此使用它而不是字符串&您没有访问子节点

 for(var i=0; i< arr.length;i++){
        const x = arr[i];
        if (x.children.label === value) {
          console.log(x.metricValue)
        }else{
          x.forEach(element => {
            if (element.children.label === value) {
              console.log(element.metricValue)
            }else{
              element.forEach(secondEl =>{
                if (secondEl.children.label === value) {
                  console.log(secondEl.metricValue)
                }
              })
            }
          });
        }
      }
for(变量i=0;i{
if(element.children.label==值){
console.log(element.metricValue)
}否则{
element.forEach(secondEl=>{
if(secondEl.children.label==值){
console.log(secondEl.metricValue)
}
})
}
});
}
}

您可以创建一种更优雅的方式来迭代子节点,但这可能会帮助您解决传入值的问题,因此使用它而不是字符串&您不会访问子节点

 for(var i=0; i< arr.length;i++){
        const x = arr[i];
        if (x.children.label === value) {
          console.log(x.metricValue)
        }else{
          x.forEach(element => {
            if (element.children.label === value) {
              console.log(element.metricValue)
            }else{
              element.forEach(secondEl =>{
                if (secondEl.children.label === value) {
                  console.log(secondEl.metricValue)
                }
              })
            }
          });
        }
      }
for(变量i=0;i{
if(element.children.label==值){
console.log(element.metricValue)
}否则{
element.forEach(secondEl=>{
if(secondEl.children.label==值){
console.log(secondEl.metricValue)
}
})
}
});
}
}
您可以创建一种围绕子节点进行迭代的更优雅的方式,但这可能会帮助您

您可以在任何级别执行(DFS)或(BFS)以查找
度量值

在这里,我使用DFS来查找所需的值。这适用于任何嵌套级别的数据

const dataObj={series:[{label:“A”,metricsValue:“ma”,children:[{label:“A-B”,value:6,metricsValue:“ma mb”},{label:“A-B-C”,metricsValue:“ma mb mc”},{label:“A-B-C-D”,value:6,metricsValue:“ma mb mc md”},{label:“1”,metricsValue:“m1”};
函数getMetrics(arr、标签){
var结果;
for(设i=0;i您可以执行(DFS)或(BFS)来查找任何级别的
度量值

在这里,我使用DFS来查找所需的值。这适用于任何嵌套级别的数据

const dataObj={series:[{label:“A”,metricsValue:“ma”,children:[{label:“A-B”,value:6,metricsValue:“ma mb”},{label:“A-B-C”,metricsValue:“ma mb mc”},{label:“A-B-C-D”,value:6,metricsValue:“ma mb mc md”},{label:“1”,metricsValue:“m1”};
函数getMetrics(arr、标签){
var结果;
for(设i=0;ilog(“selectedMetrics for'1'=”+getMetrics(dataObj.series,'1')那更干净了!很好。输入“1”就可以了fails@RenJith-接得好!修正了。让我知道,如果它仍然没有任何投入工作。这是一个干净得多!很好。输入“1”就可以了fails@RenJith-接得好!修正了。让我知道,如果它仍然没有任何输入工作。
 for(var i=0; i< arr.length;i++){
        const x = arr[i];
        if (x.children.label === value) {
          console.log(x.metricValue)
        }else{
          x.forEach(element => {
            if (element.children.label === value) {
              console.log(element.metricValue)
            }else{
              element.forEach(secondEl =>{
                if (secondEl.children.label === value) {
                  console.log(secondEl.metricValue)
                }
              })
            }
          });
        }
      }