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);
添加回答
舉報