如何返回一个数组的对象返回的对象,从两个不同的对象匹配一些特定的键值?



我有两个对象数组:

数组: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"
}
]

数组2: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"
}
]

我需要将数组ONE的键debtor_account的值与数组TWO的键account_number的值相匹配。如果它们匹配,则返回一个新的ARRAY 2,其中只包含两个键匹配的对象。因为只有当account_number/debtor_account匹配时,我才必须使用来自ARRAY TWO的标签和currency_name。这两个数组来自不同的端点,我不确定如何处理这种情况。

我建议创建所有债务人帐户的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()来做到这一点,但是对于大型数组来说,这将是低效的。

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

最新更新