亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何循環 API 調用以獲取層次結構,直到條件為真?

如何循環 API 調用以獲取層次結構,直到條件為真?

aluckdog 2022-10-13 15:45:41
我試圖找出使 API 調用循環的“最佳”方法,直到滿足條件(或者如果有更好的解決方案。)API 將為我提供有關公司的最終BeneficialOwners 的數據。一家公司可以有多個所有者,其類型可以是:公司或個人。我的目標是收集每個找到的所有者的所有信息,直到我找到屬于type:person. 然后我知道我找到了最高級別的所有者。假設我要求 A 公司的所有所有者。const requestResult = await lookupOwners(cinForCompanyA);A 公司歸 B 公司所有,因此響應如下所示:{ owners: [  {   title: 'Company B',   type: 'corp',   cin: 1234,  } ]}我存儲該數據,現在我想為 CompanyB 請求數據const requestResult = await lookupOwners(1234);并繼續這個過程,直到響應對象有type: 'person'. 因此,假設 B 公司的查找返回 john 和 Anna 作為所有者:{ owners: [  {   name: 'john',   type: 'person',  },  {   name: 'anna',   type: 'person' ]}總結一下:如果所有者是type: corp我想為每個公司提出一個新的 api 請求,直到響應包含一個準確的人。然后我們就完成了!我正在尋找一種無論初始公司是否有 10 級所有者或 0 級都可以使用的方法。什么是好方法?希望這有意義嗎?
查看完整描述

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);


查看完整回答
反對 回復 2022-10-13
?
慕哥6287543

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);

    }

  }

}


查看完整回答
反對 回復 2022-10-13
?
慕神8447489

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);


查看完整回答
反對 回復 2022-10-13
  • 3 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號