javascript - 按值在深层嵌套对象中查找对象

标签 javascript

我想在深层嵌套对象中按值查找对象 id。我尝试用递归来做到这一点,但无法弄清楚为什么会出现“未定义”。

在这段代码中,我在控制台 "final result: 234324234" 中是正确的,但由于某种原因,这个结果没有从这个函数返回。

请看一下。

demo in jsbin

let obj = {
  "uuid": "344444",
  "entityName": "priceFormationPhase",
  "id": 2,
  "value": "foo",
  "children": {
    "4": {
      "uuid": "44444",
      "entityName": "organization",
      "id": 4,
      "value": "ffffff",
      "children": {
        "344534": {
          "uuid": "33333",
          "entityName": "contract",
          "id": 928688,
          "value": "dh",
          "children": {
            "345345": {
              "uuid": "222222222",
              "entityName": "contractPhase",
              "id": 234324234,
              "value": "111",
              "children": {}
            }
          }
        }
      }
    }
  }
};

function findContractStage(obj) {
  if ((typeof obj.children === 'object') && (Object.keys(obj.children).length > 0)) {
    findContractStage(obj.children);
  } else if (typeof obj[Object.keys(obj)[0]] === 'object') {
    findContractStage(obj[Object.keys(obj)[0]]);
  } else if (obj.entityName) {
    console.log(`final result: ${obj.id}`);
    return obj.id;
  }

}

let contractStageId = findContractStage(obj);

console.log(`contractStageId: ${contractStageId}`);

最佳答案

您忘记返回函数

let obj = {
  "uuid": "344444",
  "entityName": "priceFormationPhase",
  "id": 2,
  "value": "foo",
  "children": {
    "4": {
      "uuid": "44444",
      "entityName": "organization",
      "id": 4,
      "value": "ffffff",
      "children": {
        "344534": {
          "uuid": "33333",
          "entityName": "contract",
          "id": 928688,
          "value": "dh",
          "children": {
            "345345": {
              "uuid": "222222222",
              "entityName": "contractPhase",
              "id": 234324234,
              "value": "111",
              "children": {}
            }
          }
        }
      }
    }
  }
};

function findContractStage(obj) {
  if ((typeof obj.children === 'object') && (Object.keys(obj.children).length > 0)) {
    return findContractStage(obj.children);
  } else if (typeof obj[Object.keys(obj)[0]] === 'object') {
    return findContractStage(obj[Object.keys(obj)[0]]);
  } else if (obj.entityName) {
    console.log(`final result: ${obj.id}`);
    return obj.id;
  }

}

let contractStageId = findContractStage(obj);

console.log(`contractStageId: ${contractStageId}`);

关于javascript - 按值在深层嵌套对象中查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58167753/

相关文章:

javascript - yarn 升级以修复 yarn 审计错误

javascript - 获取位于表单内的第二个输入的值。 javascript 查询

javascript - 更改 html 下载的名称

javascript - 如何检测何时在 javascript 中设置了全局变量?

javascript 输入不显示值,但控制台显示它有它

javascript - IF 语句无法正常工作

javascript - 协助在我的本地主机应用程序上下载文件

javascript - 单击时禁用提交按钮太慢,延迟

javascript - 更改 TabsetPanel 中的选项卡后, Shiny 的 renderUI 不会显示不同的 D3 图

javascript - PDF JavaScript的执行条件