我有一个嵌套对象,我的目标是获取路径,直到数组中的键值对匹配为止。
我当前的实现通过字符串并将字符串与点(“.”)连接来实现。
但是,我不想将所有临时结果添加到数组中并推送到它。但不知怎的,这不起作用。
带有示例数据的代码
const data = [
{
parentId: "1111",
name: "Audi",
children : [
{
parentId: "2222",
name: "Benz",
children : [
{
parentId: "3333",
name: "VW",
children : [
]
}
]
}
]
}
]
const pathTo = (array, target) => {
var result;
array.some(({ parentId, name, children = [] }) => {
if (parentId === target) {
return result = JSON.stringify({"parentId" : parentId, "name" : name});
}
var temp = pathTo(children, target)
if (temp) {
return result = JSON.stringify({"parentId" : parentId, "name" : name}) + "." + temp;
}
});
return result;
};
console.log(pathTo(data, "3333"))
当前结果
{"parentId":"1111","name":"Audi"}.{"parentId":"2222","name":"Benz"}.{"parentId":"3333","name":"VW"}
=> 用字符串连接的路径。但我想:
预期结果
[ "{"parentId":"1111","name":"Audi"}", "{"parentId":"2222","name":"Benz"}"{"parentId":"3333","name":"VW"}"]
=> 所有元素按后续顺序排列的数组。
最佳答案
您可以返回一个数组或未定义
。
const
data = [{ parentId: "1111", name: "Audi", children : [{ parentId: "2222", name: "Benz", children : [{ parentId: "3333", name: "VW", children : [] }] }] }],
pathTo = (array, target) => {
let result;
array.some(({ parentId, name, children = [] }) => {
if (parentId === target) {
result = [{ parentId: parentId, name: name }];
return true;
}
const temp = pathTo(children, target)
if (temp) {
result = [{ parentId: parentId, name: name }, ...temp];
return true;
}
});
return result;
};
console.log(pathTo(data, "3333"))
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于JavaScript:将递归结果添加到数组并返回它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69658579/