Arrays 即使在对象中存在另一个数组,如何获取数组键名?

Arrays 即使在对象中存在另一个数组,如何获取数组键名?,arrays,json,reactjs,Arrays,Json,Reactjs,我正在尝试获取新数组的数组键名称,即使数组中有另一个数组 到目前为止,我能够得到所有的键名,除了那些在一个级别以下的键名 我有一个现有阵列: searchResult = [ {"id":1, "name":"Duracell", "manufacturer":"Duracell", "model":"DC2400", "type": { "id":4,"type":"Nickel Metal Hydride","rechargeable":true

我正在尝试获取新数组的数组键名称,即使数组中有另一个数组

到目前为止,我能够得到所有的键名,除了那些在一个级别以下的键名

我有一个现有阵列:

searchResult = [
  {"id":1,
   "name":"Duracell",
   "manufacturer":"Duracell",
   "model":"DC2400",
   "type": {
     "id":4,"type":"Nickel Metal Hydride","rechargeable":true
    },
     "size": {
      "size":"AAA","shape":"Cylindrical"
    },
    "nominalCapacity":750,
    "nominalVoltage":1,
    "diameter":10,
    "width":null, 
    "height":44,
    "length":null,
    "depth":null
   },
   {...},
   {...}
]
我把它当作道具,并得到关键的名字:

const formFields = Object.keys(this.props.searchResult[0])
console.log(formFields)
console.log输出为:

 ["id",
  "name",
  "manufacturer",
  "model",
  "type",
  "size",
  "nominalCapacity",
  "nominalVoltage",
  "diameter",
  "width",
  "height",
  "length",
  "depth"]
它缺少以下内容:

   "type": {
     "id", "type", "rechargeable"
    },
     "size": {
       "size","shape"
    }
所以我希望它是这样的:

 ["id",
  "name",
  "manufacturer",
  "model",
  "type": {
    "id", "type", "rechargeable"
   },
   "size": {
     "size","shape"
    },
  "nominalCapacity",
  "nominalVoltage",
  "diameter",
  "width",
  "height",
  "length",
  "depth"]
更新 下面的注释包含我使用的代码:

 const formFields = this.props.searchResult[0]
 var keys = [];
 for(var key in formFields) {
     keys.push(key);
      if(typeof formFields[key] === "object") {
         var subkeys = getDeepKeys(formFields[key]);
         keys = keys.concat(subkeys.map(function(subkey) {
            return key + "." + subkey;
         }));
      }
  }
 console.log(keys)
console.log输出为:

["id", "name", "manufacturer", "model", "type", "size", "nominalCapacity", "nominalVoltage", "diameter", "width", "height", "length", "depth"]

仍然不是预期的那样。完全相同的结果

@NikKyriakides评论解决了所有问题。答案是这个问题:

可能是@NikKyriakides的复制品,请检查一下,看看是否对我有好处。标题有点不一样,为什么你能找到它,谢谢。你需要使用递归。我想你可以修改这个被接受的答案。我一直在回复[0,1,2,3,4…有什么想法吗?@NikKyriakides。过了一会儿我又检查了一遍,是的,它起作用了。我修改错了。谢谢。