簡體   English   中英

如何返回一個對象數組,返回與某些特定鍵匹配的對象:來自兩個不同對象的值?

[英]how to return an array of objects returning the objects that matched some specific key:values from two different objects?

我有這兩個 arrays 對象:

數組一: const arrayOne = props.data.map((item: any) => item);

[
    {
        "id": 236,
        "created_at": "2023-01-18T11:42:00.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "43SFV52",
        "end_to_end_id": "qHDyAKziYHbbqP4",
        "amount": "5000000.0",
        "currency": "EUR",
        "state": "received",
        "debtor_account": "44635890652"
    },
    {
        "id": 235,
        "created_at": "2023-01-18T11:41:51.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "4KZT58F",
        "end_to_end_id": "yChn3L6WyrDe33v",
        "amount": "5000000.0",
        "currency": "EUR",
        "state": "rejected",
        "debtor_account": "44635890652"
    },
    {
        "id": 234,
        "created_at": "2023-01-18T11:41:25.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "49N5GX7",
        "end_to_end_id": "fkgRlzDNf5m05Gp",
        "amount": "100.0",
        "currency": "EUR",
        "state": "rejected",
        "debtor_account": "44635890652"
    },
    {
        "id": 233,
        "created_at": "2023-01-02T11:22:00.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "4EBFTLB",
        "end_to_end_id": "jBjnSbEBKEkL3Uh",
        "amount": "100.0",
        "currency": "EUR",
        "state": "rejected",
        "debtor_account": "45701229351"
    },
    {
        "id": 232,
        "created_at": "2023-01-02T11:21:58.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "44XT7A3",
        "end_to_end_id": "Bqzn_5QeQRgM2cM",
        "amount": "100.0",
        "currency": "EUR",
        "state": "rejected",
        "debtor_account": "45701229351"
    },
    {
        "id": 231,
        "created_at": "2023-01-02T11:21:57.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "4GP5FWD",
        "end_to_end_id": "0WTciFP_hUDa892",
        "amount": "100.0",
        "currency": "EUR",
        "state": "rejected",
        "debtor_account": "45701229351"
    },
    {
        "id": 230,
        "created_at": "2023-01-02T11:21:56.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "47AFUM5",
        "end_to_end_id": "kiYrGUqR9TVmi9J",
        "amount": "100.0",
        "currency": "EUR",
        "state": "rejected",
        "debtor_account": "45701229351"
    },
    {
        "id": 229,
        "created_at": "2023-01-02T11:17:44.000Z",
        "execution_date": "2022-10-19",
        "inpay_unique_reference": "4BYT699",
        "end_to_end_id": "xC7ebgovVERRrTQ",
        "amount": "100.0",
        "currency": "EUR",
        "state": "rejected",
        "debtor_account": "45701229351"
    }
]

數組二: const arrayTwo = accountsInfo.map((account) => account);

[
    {
        "account_number": "45701229351",
        "currency_code": "EUR",
        "currency_name": "Euro",
        "balance": "9998549.0",
        "has_transactions": true
    },
    {
        "account_number": "28723609565",
        "currency_code": "GBP",
        "currency_name": "Pound Sterling",
        "balance": "0.0",
        "has_transactions": false
    },
    {
        "account_number": "29224097574",
        "currency_code": "DKK",
        "currency_name": "Danish Krone",
        "balance": "0.0",
        "has_transactions": false
    },
    {
        "account_number": "06632990033",
        "currency_code": "CAD",
        "currency_name": "Canadian Dollar",
        "balance": "0.0",
        "has_transactions": false
    },
    {
        "account_number": "60494674498",
        "currency_code": "CAD",
        "currency_name": "Canadian Dollar",
        "balance": "0.0",
        "has_transactions": false
    },
    {
        "account_number": "43887893609",
        "currency_code": "EUR",
        "currency_name": "Euro",
        "balance": "0.0",
        "has_transactions": false
    },
    {
        "account_number": "33256467724",
        "currency_code": "SEK",
        "currency_name": "Swedish Krona",
        "balance": "0.0",
        "has_transactions": false,
        "label": "Marco swedish"
    },
    {
        "account_number": "44635890652",
        "currency_code": "EUR",
        "currency_name": "Euro",
        "balance": "0.0",
        "has_transactions": false,
        "label": "Marco euro test label"
    }
]

我需要將 ARRAY ONE 的鍵 debtor_account 的值與 ARRAY TWO 的鍵 account_number 的值相匹配。 如果它們匹配,則返回一個新的 ARRAY TWO,其中僅包含這兩個鍵匹配的對象。 因為只有當 account_number/debtor_account 匹配時,我才必須使用 ARRAY TWO 中的 label 和 currency_name。 這兩個 arrays 來自不同的端點,我不確定如何處理這種情況。

我建議創建一Set所有債務人帳戶,將數組 1 中的每個債務人帳號映射到這個新集合。

然后,我們將在數組 2 上使用Array.filter()以僅返回債務人集中存在帳號的條目。

這種方法會很有效,因為我們只會迭代每個數組一次。

 const array1 = [ { "id": 236, "created_at": "2023-01-18T11:42:00.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "43SFV52", "end_to_end_id": "qHDyAKziYHbbqP4", "amount": "5000000.0", "currency": "EUR", "state": "received", "debtor_account": "44635890652" }, { "id": 235, "created_at": "2023-01-18T11:41:51.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4KZT58F", "end_to_end_id": "yChn3L6WyrDe33v", "amount": "5000000.0", "currency": "EUR", "state": "rejected", "debtor_account": "44635890652" }, { "id": 234, "created_at": "2023-01-18T11:41:25.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "49N5GX7", "end_to_end_id": "fkgRlzDNf5m05Gp", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "44635890652" }, { "id": 233, "created_at": "2023-01-02T11:22:00.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4EBFTLB", "end_to_end_id": "jBjnSbEBKEkL3Uh", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 232, "created_at": "2023-01-02T11:21:58.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "44XT7A3", "end_to_end_id": "Bqzn_5QeQRgM2cM", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 231, "created_at": "2023-01-02T11:21:57.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4GP5FWD", "end_to_end_id": "0WTciFP_hUDa892", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 230, "created_at": "2023-01-02T11:21:56.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "47AFUM5", "end_to_end_id": "kiYrGUqR9TVmi9J", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 229, "created_at": "2023-01-02T11:17:44.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4BYT699", "end_to_end_id": "xC7ebgovVERRrTQ", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" } ] const array2 = [ { "account_number": "45701229351", "currency_code": "EUR", "currency_name": "Euro", "balance": "9998549.0", "has_transactions": true }, { "account_number": "28723609565", "currency_code": "GBP", "currency_name": "Pound Sterling", "balance": "0.0", "has_transactions": false }, { "account_number": "29224097574", "currency_code": "DKK", "currency_name": "Danish Krone", "balance": "0.0", "has_transactions": false }, { "account_number": "06632990033", "currency_code": "CAD", "currency_name": "Canadian Dollar", "balance": "0.0", "has_transactions": false }, { "account_number": "60494674498", "currency_code": "CAD", "currency_name": "Canadian Dollar", "balance": "0.0", "has_transactions": false }, { "account_number": "43887893609", "currency_code": "EUR", "currency_name": "Euro", "balance": "0.0", "has_transactions": false }, { "account_number": "33256467724", "currency_code": "SEK", "currency_name": "Swedish Krona", "balance": "0.0", "has_transactions": false, "label": "Marco swedish" }, { "account_number": "44635890652", "currency_code": "EUR", "currency_name": "Euro", "balance": "0.0", "has_transactions": false, "label": "Marco euro test label" } ] // Create a Set containing all debtor accounts... const debtorSet = new Set(array1.map(el => el.debtor_account)); const result = array2.filter(obj => debtorSet.has(obj.account_number)); console.log('Result:', result)
 .as-console-wrapper { max-height: 100%;important; }

您可以使用Array.find()使用更少的代碼來完成此操作,但這對於大型 arrays 來說效率很低。

 const array1 = [ { "id": 236, "created_at": "2023-01-18T11:42:00.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "43SFV52", "end_to_end_id": "qHDyAKziYHbbqP4", "amount": "5000000.0", "currency": "EUR", "state": "received", "debtor_account": "44635890652" }, { "id": 235, "created_at": "2023-01-18T11:41:51.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4KZT58F", "end_to_end_id": "yChn3L6WyrDe33v", "amount": "5000000.0", "currency": "EUR", "state": "rejected", "debtor_account": "44635890652" }, { "id": 234, "created_at": "2023-01-18T11:41:25.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "49N5GX7", "end_to_end_id": "fkgRlzDNf5m05Gp", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "44635890652" }, { "id": 233, "created_at": "2023-01-02T11:22:00.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4EBFTLB", "end_to_end_id": "jBjnSbEBKEkL3Uh", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 232, "created_at": "2023-01-02T11:21:58.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "44XT7A3", "end_to_end_id": "Bqzn_5QeQRgM2cM", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 231, "created_at": "2023-01-02T11:21:57.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4GP5FWD", "end_to_end_id": "0WTciFP_hUDa892", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 230, "created_at": "2023-01-02T11:21:56.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "47AFUM5", "end_to_end_id": "kiYrGUqR9TVmi9J", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" }, { "id": 229, "created_at": "2023-01-02T11:17:44.000Z", "execution_date": "2022-10-19", "inpay_unique_reference": "4BYT699", "end_to_end_id": "xC7ebgovVERRrTQ", "amount": "100.0", "currency": "EUR", "state": "rejected", "debtor_account": "45701229351" } ] const array2 = [ { "account_number": "45701229351", "currency_code": "EUR", "currency_name": "Euro", "balance": "9998549.0", "has_transactions": true }, { "account_number": "28723609565", "currency_code": "GBP", "currency_name": "Pound Sterling", "balance": "0.0", "has_transactions": false }, { "account_number": "29224097574", "currency_code": "DKK", "currency_name": "Danish Krone", "balance": "0.0", "has_transactions": false }, { "account_number": "06632990033", "currency_code": "CAD", "currency_name": "Canadian Dollar", "balance": "0.0", "has_transactions": false }, { "account_number": "60494674498", "currency_code": "CAD", "currency_name": "Canadian Dollar", "balance": "0.0", "has_transactions": false }, { "account_number": "43887893609", "currency_code": "EUR", "currency_name": "Euro", "balance": "0.0", "has_transactions": false }, { "account_number": "33256467724", "currency_code": "SEK", "currency_name": "Swedish Krona", "balance": "0.0", "has_transactions": false, "label": "Marco swedish" }, { "account_number": "44635890652", "currency_code": "EUR", "currency_name": "Euro", "balance": "0.0", "has_transactions": false, "label": "Marco euro test label" } ] const result = array2.filter(obj => array1.find(el => el.debtor_account === obj.account_number)); console.log('Result:', result)
 .as-console-wrapper { max-height: 100%;important; }


for(let i = 0; i < array1.length; i++) {
  const item1 = array1[i];
  console.log('item1: ', item1)
  let new_item = {};
  for(let j = 0; j < array2.length; j++) {
    const item2 = array2[j];
    if(item1.debtor_account == item2.account_number) {
      new_item = {...item1, ...item2};
      break;
    }
  }
  new_array = [...new_array, new_item];
}

// new_array contains data you want

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM