编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
console.log("Hello world!            -  js.jsrun.net ");
//递归寻找所有子节点
function getAllKeysByCode(data, code) {
  let result = [];

  function findNode(nodeList) {
    for (const node of nodeList) {
      if (node.key === code) {
        // 找到指定code的节点,提取其所有子节点的key
        collectKeys(node);
      } else if (node.childList.length > 0) {
        // 如果有子节点,则递归遍历子节点
        findNode(node.childList);
      }
    }
  }

  function collectKeys(node) {
    if (node.childList.length === 0) {
      // 如果没有子节点,则把当前节点的key加入结果
      result.push(node.key);
    } else {
      // 如果有子节点,则递归收集所有子节点的key
      for (const child of node.childList) {
        collectKeys(child);
      }
    }
  }

  // 开始查找
  findNode(data);
  return result;
}

// 示例数据
const data = [
  {
    key: '820000',
    value: '澳门',
    childList: [
      { key: '820001', value: '花地玛堂区', childList: [] },
      { key: '820002', value: '花王堂区', childList: [] },
      { key: '820003', value: '望德堂区', childList: [] },
      { key: '820004', value: '大堂区', childList: [] },
      { key: '820005', value: '风顺堂区', childList: [] },
      { key: '820006', value: '嘉模堂区', childList: [] },
      { key: '820007', value: '路凼填海区', childList: [] },
      { key: '820008', value: '圣方济各堂区', childList: [] },
      { key: '820100', value: '澳门特别行政区', childList: [] },
    ],
  },
  {
    key: '710000',
    value: '台湾省',
    childList: [
      {
        key: '710100',
        value: '台北市',
        childList: [
          { key: '710101', value: '北投区', childList: [] },
          { key: '710102', value: '松山区', childList: [] },
          { key: '710103', value: '大同区', childList: [] },
          { key: '710104', value: '文山区', childList: [] },
          { key: '710105', value: '信义区', childList: [] },
          { key: '710106', value: '内湖区', childList: [] },
          { key: '710107', value: '中正区', childList: [] },
          { key: '710108', value: '万华区', childList: [] },
          { key: '710109', value: '中山区', childList: [] },
          { key: '710110', value: '士林区', childList: [] },
          { key: '710111', value: '南港区', childList: [] },
          { key: '710112', value: '大安区', childList: [] },
        ],
      },
      {
        key: '710400',
        value: '台中市',
        childList: [
          { key: '710401', value: '东区', childList: [] },
          { key: '710402', value: '新社区', childList: [] },
          { key: '710403', value: '中区', childList: [] },
          { key: '710404', value: '屯区', childList: [] },
          { key: '710405', value: '神冈区', childList: [] },
          { key: '710406', value: '沙鹿区', childList: [] },
          { key: '710407', value: '丰原区', childList: [] },
          { key: '710408', value: '大里区', childList: [] },
          { key: '710409', value: '龙井区', childList: [] },
          { key: '710410', value: '西区', childList: [] },
          { key: '710411', value: '南区', childList: [] },
          { key: '710412', value: '西屯区', childList: [] },
          { key: '710413', value: '太平区', childList: [] },
        ],
      },
      // ...其他区域
    ],
  },
];

// 调用函数获取指定code的所有子节点key
const result = getAllKeysByCode(data, '820001');  // 例如:获取台北市的所有子节点
console.log(result);