javascript - typescript : Is there a way to get all the keys in a Javascript object with nested properties?

标签 javascript recursion javascript-objects

例如,如果我有

{
   "key1":{
      "key2":[
         {
            "key3":[
               {
                  "key4":{
                     "key5":0
                  }
               },
               {
                  "key6":{
                     "key7":""
                  }
               }
            ]
         },
         {
            "key8":{
               "key9":true
            }
         }
      ]
   }
}

有没有办法像这样获取所有 key ?

["key1", "key2", "key3", "key4", "key5", "key6", "key7", "key8", "key9"]

编辑:我尝试了 suggestion在这里,但没有成功 Typescript: what could be causing this error? "Element implicitly has an 'any' type because type 'Object' has no index signature"

最佳答案

您需要一个递归函数才能进行迭代。

尝试这样

var obj = {
  "key1": {
    "key2": [{
      "key3": [{
        "key4": {
          "key5": 0
        }
      }, {
        "key6": {
          "key7": ""
        }
      }]
    }, {
      "key8": {
        "key9": true
      }
    }]
  }
};
var keys = [];

function collectKey(obj) {
  if (obj instanceof Array) {
    //console.log("array");
    for (var i = 0; i < obj.length; i++) {
      collectObj(obj[i]);
    }
  } else if (typeof obj == "object") {
    //console.log("object");
    collectObj(obj)
  } else {
    return;
  }
}

function collectObj(obj) {
  for (var i = 0; i < Object.keys(obj).length; i++) {
    keys.push(Object.keys(obj)[i]);
    collectKey(obj[Object.keys(obj)[i]]);
  }
}
collectKey(obj);
console.log(keys);

关于javascript - typescript : Is there a way to get all the keys in a Javascript object with nested properties?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928610/

相关文章:

javascript - 在没有事件的情况下从 HTML 执行 javascript 函数

javascript - jQuery 数据表使用新参数从 ajax 源重新加载

javascript - 从构造函数创建时如何包含或检测新对象的名称

javascript - 使用 Javascript 获取自定义 HTTP header

javascript - 从服务器到客户端 Node.js 的文件传输

mysql - 使用MySQL查询遍历行制作递归树

javascript - 对象嵌套属性访问

sql - 递归查询中不允许使用聚合函数。是否有其他方法来编写此查询?

javascript - 面向对象的 Javascript 错误对象不是函数

JavaScript 数组和对象映射