JavaScript:包含属于每个银行的客户的对象



到 es6,该练习包括显示对象,其中键是银行的名称和处置中的值及其客户端的文本编号。

使用以下矩阵

const clients = [
{ id: 1, taxNumber: '86620855', name: 'HECTOR ACUÑA BOLAÑOS'},
{ id: 2, taxNumber: '7317855K', name: 'JESUS RODRIGUEZ ALVAREZ'},
{ id: 3, taxNumber: '73826497', name: 'ANDRES NADAL MOLINA'},
{ id: 4, taxNumber: '88587715', name: 'SALVADOR ARNEDO MANRIQUEZ'},
{ id: 5, taxNumber: '94020190', name: 'VICTOR MANUEL ROJAS LUCAS'},
{ id: 6, taxNumber: '99804238', name: 'MOHAMED FERRE SAMPER' }
];
const accounts = [
{ clientId: 6, bankId: 1, balance: 15000 },
{ clientId: 1, bankId: 3, balance: 18000 },
{ clientId: 5, bankId: 3, balance: 135000 },
{ clientId: 2, bankId: 2, balance: 5600 },
{ clientId: 3, bankId: 1, balance: 23000 },
{ clientId: 5, bankId: 2, balance: 15000 },
{ clientId: 3, bankId: 3, balance: 45900 },
{ clientId: 2, bankId: 3, balance: 19000 },
{ clientId: 4, bankId: 3, balance: 51000 },
{ clientId: 5, bankId: 1, balance: 89000 },
{ clientId: 1, bankId: 2, balance: 1600 },
{ clientId: 5, bankId: 3, balance: 37500 },
{ clientId: 6, bankId: 1, balance: 19200 },
{ clientId: 2, bankId: 3, balance: 10000 },
{ clientId: 3, bankId: 2, balance: 5400 },
{ clientId: 3, bankId: 1, balance: 9000 },
{ clientId: 4, bankId: 3, balance: 13500 },
{ clientId: 2, bankId: 1, balance: 38200 },
{ clientId: 5, bankId: 2, balance: 17000 },
{ clientId: 1, bankId: 3, balance: 1000 },
{ clientId: 5, bankId: 2, balance: 600 },
{ clientId: 6, bankId: 1, balance: 16200 },
{ clientId: 2, bankId: 2, balance: 10000 }
]
const banks = [
{ id: 1, name: 'BankA' },
{ id: 2, name: 'BankB' },
{ id: 3, name: 'BankC' }
];

那么结果将是这样的:

0: {bank: 'BankA', clients: {'99804238', '94020190', '73826497'} } ,
1: {bank: 'BankB', clients: {'7317855K', '94020190', '86620855'} } ,
2: {bank: 'BankC', clients: {'73826497', '86620855', '88587715'} } 

基本上,此结果包含包含 客户端值,其中包含 使用该银行。

最终结果将包含每家银行的客户总数, 仅参考图像。

function banksClientsTaxNumbers() {
var map = accounts.reduce(function(map, acc) {
var bankByid = acc.bankId
map[bankByid ] = {} 
return map 
}, {})
console.log(map)
var array = Object.keys(map).map(function(id) {
var bank = banks.find(function(bank) {
return bank.id == id;
})
var account = accounts.filter(function(account) {
return account.bankId == id;
})
console.log(account)
return {
banco: bank.name,
clients: account
}
});
console.log(array)

}

此代码的结果是:

图像结果

如您所见,列出了每家银行包含的帐户,但我们仍然必须到达客户数组以通过文本编号显示它们,请帮忙!

如果你达到了这个练习的逻辑,我提前感谢你。问候!

为了降低时间复杂度,请将clients转换为按客户端 ID 索引的taxNumbers 的对象,并对按银行 ID 索引的banks执行相同的操作。然后,您可以将accountsreduce到按bankId索引的累加器中,将每个客户端添加到Set(以进行重复数据删除(,然后将Set转换为数组,O(N)

const clients=[{id:1,taxNumber:'86620855',name:'HECTOR ACUÑA BOLAÑOS'},{id:2,taxNumber:'7317855K',name:'JESUS RODRIGUEZ ALVAREZ'},{id:3,taxNumber:'73826497',name:'ANDRES NADAL MOLINA'},{id:4,taxNumber:'88587715',name:'SALVADOR ARNEDO MANRIQUEZ'},{id:5,taxNumber:'94020190',name:'VICTOR MANUEL ROJAS LUCAS'},{id:6,taxNumber:'99804238',name:'MOHAMED FERRE SAMPER'}];const accounts=[{clientId:6,bankId:1,balance:15000},{clientId:1,bankId:3,balance:18000},{clientId:5,bankId:3,balance:135000},{clientId:2,bankId:2,balance:5600},{clientId:3,bankId:1,balance:23000},{clientId:5,bankId:2,balance:15000},{clientId:3,bankId:3,balance:45900},{clientId:2,bankId:3,balance:19000},{clientId:4,bankId:3,balance:51000},{clientId:5,bankId:1,balance:89000},{clientId:1,bankId:2,balance:1600},{clientId:5,bankId:3,balance:37500},{clientId:6,bankId:1,balance:19200},{clientId:2,bankId:3,balance:10000},{clientId:3,bankId:2,balance:5400},{clientId:3,bankId:1,balance:9000},{clientId:4,bankId:3,balance:13500},{clientId:2,bankId:1,balance:38200},{clientId:5,bankId:2,balance:17000},{clientId:1,bankId:3,balance:1000},{clientId:5,bankId:2,balance:600},{clientId:6,bankId:1,balance:16200},{clientId:2,bankId:2,balance:10000}]
const banks=[{id:1,name:'BankA'},{id:2,name:'BankB'},{id:3,name:'BankC'}]
const taxNumberByClientId = clients.reduce(
(a, { id, taxNumber }) => Object.assign(a, { [id]: taxNumber }),
{}
);
const banksByBankId = banks.reduce(
(a, { id, name }) => Object.assign(a, { [id]: name }),
{}
);
const taxNumbersByBank = accounts.reduce((a, { clientId, bankId }) => {
const bankName = banksByBankId[bankId];
const taxNumber = taxNumberByClientId[clientId];
if (!a[bankName]) a[bankName] = new Set();
a[bankName].add(taxNumber);
return a;
}, {});
const results = Object.entries(taxNumbersByBank)
.map(([bank, clientsSet]) => ({
bank,
clients: [...clientsSet]
}));
console.log(results);

可以进一步简化如下:

const clients = [
{ id: 1, taxNumber: '86620855', name: 'HECTOR ACUÑA BOLAÑOS' },
{ id: 2, taxNumber: '7317855K', name: 'JESUS RODRIGUEZ ALVAREZ' },
{ id: 3, taxNumber: '73826497', name: 'ANDRES NADAL MOLINA' },
{ id: 4, taxNumber: '88587715', name: 'SALVADOR ARNEDO MANRIQUEZ' },
{ id: 5, taxNumber: '94020190', name: 'VICTOR MANUEL ROJAS LUCAS' },
{ id: 6, taxNumber: '99804238', name: 'MOHAMED FERRE SAMPER' }
];
const accounts = [
{ clientId: 6, bankId: 1, balance: 15000 },
{ clientId: 1, bankId: 3, balance: 18000 },
{ clientId: 5, bankId: 3, balance: 135000 },
{ clientId: 2, bankId: 2, balance: 5600 },
{ clientId: 3, bankId: 1, balance: 23000 },
{ clientId: 5, bankId: 2, balance: 15000 },
{ clientId: 3, bankId: 3, balance: 45900 },
{ clientId: 2, bankId: 3, balance: 19000 },
{ clientId: 4, bankId: 3, balance: 51000 },
{ clientId: 5, bankId: 1, balance: 89000 },
{ clientId: 1, bankId: 2, balance: 1600 },
{ clientId: 5, bankId: 3, balance: 37500 },
{ clientId: 6, bankId: 1, balance: 19200 },
{ clientId: 2, bankId: 3, balance: 10000 },
{ clientId: 3, bankId: 2, balance: 5400 },
{ clientId: 3, bankId: 1, balance: 9000 },
{ clientId: 4, bankId: 3, balance: 13500 },
{ clientId: 2, bankId: 1, balance: 38200 },
{ clientId: 5, bankId: 2, balance: 17000 },
{ clientId: 1, bankId: 3, balance: 1000 },
{ clientId: 5, bankId: 2, balance: 600 },
{ clientId: 6, bankId: 1, balance: 16200 },
{ clientId: 2, bankId: 2, balance: 10000 }
]
const banks = [
{ id: 1, name: 'BankA' },
{ id: 2, name: 'BankB' },
{ id: 3, name: 'BankC' }
];
function banksClientsTaxNumbers() {
return banks.reduce((obj, bank) => {
return {
...obj,
[bank.name]: accounts
.filter(account => account.bankId === bank.id)
.map(account => account.clientId)
.filter((value, index, array) => array.indexOf(value) === index)
.map(clientId => clients.find(client => client.id === clientId))
.sort(function (a, b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); })
.map(client => client.taxNumber)
}
}, {})
}
console.log(banksClientsTaxNumbers());

最新更新