我的函数遇到了问题,该函数没有返回值并使它不确定,但仍然可以找到适当的值,但会“丢失”。 我正在做的事情是通过深度嵌套的数组,并寻找我想通过parentId添加的元素的父级。
const data = [
{ id: '1', parentId: null, title: 'Hi'},
[
{ id: '2', parentId: '1', title: 'Hello'},
{ id: '3', parentId: '2', title: 'Morning'},
[
{ id: '5', parentId: '2', title: 'Bye'},
{ id: '6', parentId: '3', title: 'Hey'},
]
]
]
这是我用来查找父项的函数:
findParent(value, data) {
return new Promise((resolve, reject) => {
let parent;
data.map(child => {
if (isArray(child)) {
return findParent(value, child);
} else {
if (child.id === value.parentId) {
return parent = child;
}
}
})
if (parent !== undefined) {
resolve(parent)
} else {
reject(Error('Parent is undefined'))
}
});
}
传递的值类似于数据的一部分{id:'2',parentId:'1',title:'Hello'}。
谢谢。
答案 0 :(得分:1)
您可以创建一个同步函数来查找父级,然后再创建另一个函数来调用父级并返回承诺。
示例
const data = [
{ id: "1", parentId: null, title: "Hi" },
[
{ id: "2", parentId: "1", title: "Hello" },
{ id: "3", parentId: "2", title: "Morning" },
[
{ id: "5", parentId: "2", title: "Bye" },
{ id: "6", parentId: "3", title: "Hey" }
]
]
];
const value = data[1][2][1];
function findParentInner(value, data) {
for (let i = 0; i < data.length; i++) {
const d = data[i];
if (Array.isArray(d)) {
return findParentInner(value, d);
} else if (d.id === value.parentId) {
return d;
}
}
return null;
}
function findParent(value, data) {
return new Promise((resolve, reject) => {
const parent = findParentInner(value, data);
if (parent) {
resolve(parent);
} else {
reject("Parent was not found");
}
});
}
console.log(value);
findParent(value, data).then(console.log);