首页 > 解决方案 > 递归返回对象数组和嵌套对象键

问题描述

我目前正在学习递归,并且已经从数字、字符串和数组转向在对象上使用它......我正在尝试找出将对象作为参数并收集对象键的最佳方法并将所有嵌套对象放入一个数组中

我可以不使用递归返回单个对象的对象键。所以我试图将一个变量创建为一个空数组,然后使用 for 循环遍历该对象,如果“i”是一个对象,则将对象键推入数组变量并返回它。这不会很不幸。

我想要以下内容:

{lamp: 2, candle: 2, pillow: {big: 2, small: 4}, bathroom: {toilet: 1, shower: {shampoo: 1, conditioner: 2}}}

返回:

[lamp, candle, pillow, big, small, bathroom, toilet, shower, shampoo, conditioner]

希望这足以解释,如果没有,请告诉我:)

我尝试了以下方法:

function(obj) {
let keysArray = [];
for (let i = 0, i < obj.length, i++)
if (obj[i] === typeOf object) {
keysArray.push(obj[i].keys);
}
return keysArray
}

标签: javascriptobjectrecursion

解决方案


您可以编写如下递归函数

let obj = {lamp: 2, candle: 2, pillow: {big: 2, small: 4}, bathroom: {toilet: 1, shower: {shampoo: 1, conditioner: 2}}};

function getKeys(o) {
  let result = [];
  for (let key in o) {
    result.push(key);
    if(o[key] && typeof o[key] === "object") result.push(...getKeys(o[key]));
  }
  return result;
}

console.log(getKeys(obj));


推荐阅读