我有一个练习,需要按银行 ID 列出包含最低工资客户的数组。
const bills = [
{ Idclient: 2, Idbank: 2, salary: 20000 },
{ Idclient: 3, Idbank: 1, salary: 600 },
{ Idclient: 1, Idbank: 3, salary: 3000 },
{ Idclient: 4, Idbank: 1, salary: 2000 },
{ Idclient: 6, Idbank: 2, salary: 300 },
{ Idclient: 5, Idbank: 3, salary: 2500 },
{ Idclient: 7, Idbank: 3, salary: 1000 },
];
function BankMinClient() {
var min = bills.reduce(function(prev, current) {
return (prev.Idclient > current.salary) ? prev : current
})
console.log(min)
let map = bills.reduce(function(map, bill) {
var bank_id = bill.Idbank;
var balance = +bill.salary;
map[bank_id] = (map[min]) + min
return map
}, {})
return map
};
BankMinClient();
该函数返回整个数组中最低的一个,下面的函数列出了银行,但没有列出关联工资较少的客户。只显示:
{1: "undefined [object Object]", 2: "undefined [object Object]", 3:
"undefined [object Object]"}
知道如何解决吗?提前致谢。
期望的结果是:
{1: 600, 2: 300, 3: 1000}
最佳答案
您确实需要像您正在做的那样使用reduce
,但您不想添加到现有余额(如果存在现有余额) - 相反,重新分配当前余额:
const bills = [
{ Idclient: 2, Idbank: 2, salary: 20000 },
{ Idclient: 3, Idbank: 1, salary: 600 },
{ Idclient: 1, Idbank: 3, salary: 3000 },
{ Idclient: 4, Idbank: 1, salary: 2000 },
{ Idclient: 6, Idbank: 2, salary: 300 },
{ Idclient: 5, Idbank: 3, salary: 2500 },
{ Idclient: 7, Idbank: 3, salary: 1000 },
];
console.log(
bills.reduce((a, { Idbank, salary }) => {
const currentBalance = a[Idbank];
if (currentBalance === undefined || salary < currentBalance) {
a[Idbank] = salary;
}
return a;
}, {})
);
关于javascript - 如何获取数组中每个id的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165026/