首页 > 解决方案 > 有没有办法获取对象(包括子对象)内的所有键?

问题描述

目前,我正在尝试获取对象的所有键,包括子对象。

我知道

Object.keys(obj)

返回对象的键,但不返回其中对象的键。

因此,例如,我得到了以下对象:

let exampleObject = 
{
   a: "value",
   b: "value",
   c: 404,
   d: {
      e: "value",
      f: "value"
   }
}

注意: d可能会更改其名称,因此无法使用Object.keys(obj.d) 之类的东西。

如何在对象内存在的键的总列表中获取ef ?

标签: javascriptobject

解决方案


您可以使用flatMap递归获取这样的密钥:

let exampleObject={a:"value",b:"value",c:404,d:{e:"value",f:"value"}};

const getKeys = obj => Object.keys(obj).flatMap(k => Object(obj[k]) === obj[k] 
                                                        ? [k, ...getKeys(obj[k])] 
                                                        : k)

console.log(getKeys(exampleObject))

如果flatMap不支持,请reduce像这样使用:

function getKeys(obj) {
  return Object.keys(obj).reduce((r, k) => {
    r.push(k);

    if(Object(obj[k]) === obj[k])
      r.push(...getKeys(obj[k]));

    return r;
  }, [])
}

检查该Object(obj[k]) === obj[k]属性是否是一个对象,而它不是null。因为,typeof null === "object"


推荐阅读