Javascript嵌套对象遍历

标签 javascript object

我正在编写一段代码,我必须遍历嵌套对象并在单个字符串中返回所有值。例如,如果这是输入:

var obj = {
name: "root",
contents: [
  {
    name: "A",
    contents: [
      {
        name: "fileA1",
        contents: ["Hello!"]
      }
    ]
  },
  {
    name: "B",
    contents: [
      {
        name: "dirB1",
        contents: [
          {
            name: "fileB1.1",
            contents: ["Hello!"]
          }
        ]
      }
    ]
  }
]
};

输出应该是:

root
A
fileA1
Hello!
B
dirB1
fileB1.1
Hello!

我的代码是:

function toArray(obj) {
var result = '';
for (const prop in obj) {
    const value = obj[prop];
    if (typeof value === 'object') {
        result+=(toArray(value)); 
    }
    else {
        result+=(value);
    }
}
//console.log(result);
return result;
}

但是当我运行它时,它返回以下字符串:

Hello!
fileA1undefined
undefined
Aundefined
Hello!
fileB1.1undefined
undefined
dirB1undefined
undefined
Bundefined
undefinedundefined
rootundefined

为什么我得到的值是“未定义的”,我该如何解决这个问题?

最佳答案

你可以使用 flatMapObject.values()像这样:

var obj = {name:"root",contents:[{name:"A",contents:[{name:"fileA1",contents:["Hello!"]}]},{name:"B",contents:[{name:"dirB1",contents:[{name:"fileB1.1",contents:["Hello!"]}]}]}]}

const getValues = o =>
  Object.values(o).flatMap(v => typeof(v) === 'object' ? getValues(v) : v)

console.log(getValues(obj).join('\n'))

如果您将 \n 添加到 result += value,您的代码将返回所需的结果:

function toArray(obj) {
  var result = '';
  for (const prop in obj) {
    const value = obj[prop];
    if (typeof value === 'object') {
      result += toArray(value);
    } else {
      result += value + '\n';
    }
  }
  return result;
}

var obj = {name:"root",contents:[{name:"A",contents:[{name:"fileA1",contents:["Hello!"]}]},{name:"B",contents:[{name:"dirB1",contents:[{name:"fileB1.1",contents:["Hello!"]}]}]}]}

console.log(toArray(obj))

关于Javascript嵌套对象遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124463/

相关文章:

Javascript 在表中添加和求平均值时如何处理 NaN

javascript - 如何为颜色切换器添加 localStorage

Python:如何在文件中保存包含对象的列表?

ios - objective-c "callback"

javascript - 经典的复制到剪贴板是否一定需要输入字段/文本区域字段?

javascript - 如何使用 Protractor 创建条件测试用例?

javascript - 使用数字属性时操作不起作用(返回 NaN)

javascript - 在 Javascript 中合并对象以实现无限加载 Ajax 插件

java - 使用xml将matlab类对象(或结构)导出到类似类的java对象中

ruby - Ruby 中的方法 : objects or not?