我正在编写一段代码,我必须遍历嵌套对象并在单个字符串中返回所有值。例如,如果这是输入:
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
为什么我得到的值是“未定义的”,我该如何解决这个问题?
最佳答案
你可以使用 flatMap
和 Object.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/