递归javascript函数,用于将嵌套对象键转换为字符串并将所有键存储在数组中

7ajki6be  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(102)

我正在尝试编写一个javascript递归函数,该函数接收一个参数-嵌套JSON对象
函数遍历可能无限嵌套的对象,并将所有键(属性名)转换为存储在数组中的字符串。Array返回到调用函数的位置。
JSON对象示例:

{
  OBJECT1: {
    ATTRIBUTE3: {
      PARAMETER2: {
        PROPERTY1: {

        }
      }
    }
  }
}

该对象不包含任何值。
我尝试过但没有成功的方法:

function convertKeysToString(obj) {
  let keys = [];
  for (let key in obj) {
    if (typeof obj[key] === 'object') {
      keys = keys.concat(convertKeysToString(obj[key]));
    } else {
      keys.push(key.toString());
    }
  }
  return keys;
}

结果,我期望返回的键被推送到数组,但是函数根本没有得到键或者没有被推送到键数组。
我试过另一个密码:

function getNestedObjectKeys(obj) {
  var keys = []
  var firstLevel = null

  var property = Object.keys(obj)
  property = property[0]
  firstLevel = Object.keys(obj[property])[0]
  if (firstLevel == undefined) {
    return 0
  }
  let returnedValue = keys.unshift(getNestedObjectKeys(obj[property]))

  if (returnedValue == 0) {
    return Object.keys(obj[property])[0]
  }
  returnedValue = Object.keys(obj[property])[0]
  if (returnedValue != obj[property[0]]) {
    return Object.keys(obj[property])[0]
  }
  else if (returnedValue == firstLevel) {
    return keys
  }
}

函数应该返回键名,并将其推(unshift)到string,然后返回它,但unshift没有做我所期望的,并且在returnedValue中不是预期的返回字符串。
我处理它的方法是函数找到最深的(空的)对象,然后开始返回键名,问题是我必须返回键名并将其推送到字符串中,我找不到立即完成的方法。

e4eetjau

e4eetjau1#

第一个解决方案非常接近,但有一个问题(嗯,一个主要问题):当值是object类型时,你不把它的键加到数组中,那么它应该如何进入数组呢?给予这个:

function convertKeysToString(obj) {
  let keys = [];
  for (let key in obj) {
    keys.push(key.toString());
    if (typeof obj[key] === 'object') {
      keys = keys.concat(convertKeysToString(obj[key]));
    }
  }
  return keys;
}

您可能需要考虑的其他事项:
1.就是typeof null

  1. typeof []也是object
hmae6n7t

hmae6n7t2#

你可以看看对象,这是真实的类型的对象。

const
    getKeys = object => (keys => [
        ...keys.flatMap(key => object[key] && typeof object[key] === 'object'
            ? [key, ...getKeys(object[key])]
            : [key]
        )
    ])(Object.keys(object)),
    data = { OBJECT1: { ATTRIBUTE3: { PARAMETER2: { PROPERTY1: {} } } } },
    result = getKeys(data);

console.log(result);

相关问题