3 回答
TA贡献1842条经验 获得超21个赞
我想我会尝试通过递归来解决这个问题,只需将每个返回的 cin 放回函数中,直到找到一个人。您还可以添加检查,具体取决于每个公司是否终止于一个人,或者您是否在某个时候获得空值或您拥有什么,这取决于您查询的 api 的具体情况。
async function lookup(cin) {
try {
const company = await lookupOwners(cin);
if (company.owners.find((o) => o.type === "person")) {
return company;
} else {
return lookup(company?.owners[0].cin);
}
} catch (e) {
return e;
}
}
lookup(cin);
TA贡献1831条经验 获得超10个赞
使用先进先出 (FIFO) 队列和 while 循环。找到所有者后立即跳出 while 循环type: 'person'。FIFO 队列很容易使用数组实现,并使用该.shift()方法获取行中的第一个元素.append()并将元素添加到行尾。
这是一些基本代码。
let queue = [companyA];
const foundPerson = false;
const person = null;
while(queue.length > 0 && !foundPerson) {
const company = queue.shift(); // get the first company in line
const owners = await lookupOwners(company);
for(let i = 0; i < owners.length; i++) {
if(owners[i].type === "person") {
foundPerson = true;
person = owners[i];
| }
else {
// if it's not a person, add the company ID to the end of the FIFO queue
queue.append(owners[i].cin);
}
}
}
TA贡献1780条经验 获得超1个赞
由于任何一家公司都可以有多个所有者这一事实,您的可能性变得复杂......并且您不能保证您可以拥有人和公司所有者的混合......以下应该完全返回一组所有人的所有者水平
var companyID = 1234;
var peopleOwnerList = [];
var companyOwnerList = [];
companyOwnerList.push(companyID);
do {
const requestResult = await lookupOwners(companyOwnerList[0]);
var ownerList = requestResult.owners;
while(ownerList.length > 0){
if(ownerList[0].type == 'person'){
peopleOwnerList.push(ownerList[0].name);
}
else {
companyOwnerList.push(ownerList[0].cin);
}
ownerList.splice(0,1);
}
companyOwnerList.splice(0,1);
}
while(companyOwnerList.length > 0);
添加回答
举报