【发布时间】:2018-11-07 11:35:28
【问题描述】:
我有一个具有这种结构的对象数组:
const treeData = [
{ 0: ["0-0", "0-1"] },
{ 1: ["1-0", "1-1"] }
]
可能更深,但数组数据总是 json 或字符串
const treeData = [
{ 0: ["0-0", "0-1"] },
{ 1: ["1-0", "1-1"] },
2,
3
]
我想得到这样的东西:
const treeDataResult = [
{
label: "0",
value: "0",
children: [
{
label: "0-0",
value: "0-0"
},
{
label: "0-1",
value: "0-1",
}
]
},
{
label: "1",
value: "1",
children: [
{
label: "1-0",
value: "1-0",
},
{
label: "1-1",
value: "1-1",
}
]
},
{
label: "2",
value: "2"
},
{
label: "3",
value: "3"
}
]
我现在的代码是这样的:
const treeData = [
{ "0": ["0-0", "0-1"] },
{ "1" : ["1-0", "1-1"] }
];
const convertNode = (parentNode) =>
parentNode.map(
childnode => {
if (typeof(childNode) === 'string')
return {
label: childNode,
value: childNode
}
else
return
childNode.map((key, val) =>
({
label: key,
value: key,
children: convertNode(val)
})
)
}
)
var treeDataResult = convertNode(treeData);
console.log(treeDataResult);
【问题讨论】:
-
在您当前的代码中什么不起作用?
-
2和3的typeof将是"number",而不是"string"。此外,如果您的节点是一个对象,它可能不是一个数组 - 您需要实际获取您正在 (ab) 使用的单个键作为标签。 -
返回后不能有回车。如果你想在一个新的行上做:
return ( (new line here ok)childNode.map... ) -
您将 JavaScript 对象误认为是 JSON。她们不一样。 JSON总是是一个字符串。
-
当键是变量时,像
{ 0 : "foo" }和{ 1: "bar" }这样的对象是不好的。为了让您的程序提取密钥的值,必须使用Object.keys或Object.entries。与已知key和value之类的{ key: 0, value: "foo" }相比,提取每个值只需读取它们各自的属性即可。
标签: javascript arrays ecmascript-6 functional-programming