使用for循环遍历对象数组获取余额最高的银行账户问题排查
问题分析与修复
你的代码存在几个关键问题,导致无法正确获取余额最高的账户:
- 循环条件误用了未定义的
array变量,应该使用函数参数bankAccounts - 初始化
maxAccount后从未更新它,始终拿第一个账户的余额做比较,无法定位真正的最大值 - 错误地将索引值(还嵌套在数组里)推入结果数组,而非对应的账户对象
- 核心逻辑缺失:没有实现“找到更大余额时替换当前最大值”的判断
修复后的代码(返回单个账户对象)
const bankAccounts = [ { id: 1, name: "Susan", balance: 100.32, deposits: [150, 30, 221], withdrawals: [110, 70.68, 120], }, { id: 2, name: "Morgan", balance: 1100.0, deposits: [1100] }, { id: 3, name: "Joshua", balance: 18456.57, deposits: [4000, 5000, 6000, 9200, 256.57], withdrawals: [1500, 1400, 1500, 1500], }, { id: 4, name: "Candy", balance: 0.0 }, { id: 5, name: "Phil", balance: 18, deposits: [100, 18], withdrawals: [100] }, ]; function getClientWithGreatestBalance(bankAccounts) { // 处理空数组的边界情况 if (bankAccounts.length === 0) return null; let maxAccount = bankAccounts[0]; // 从第二个元素开始遍历比较 for (let i = 1; i < bankAccounts.length; i++) { if (bankAccounts[i].balance > maxAccount.balance) { // 找到更大余额时,更新当前最大账户 maxAccount = bankAccounts[i]; } } // 返回余额最高的单个账户对象 return maxAccount; } // 测试调用 console.log(getClientWithGreatestBalance(bankAccounts));
若需返回包含该账户的数组
如果严格按照你“存入新数组后返回”的需求,调整返回逻辑即可:
function getClientWithGreatestBalance(bankAccounts) { if (bankAccounts.length === 0) return []; let maxAccount = bankAccounts[0]; for (let i = 1; i < bankAccounts.length; i++) { if (bankAccounts[i].balance > maxAccount.balance) { maxAccount = bankAccounts[i]; } } // 将最大账户存入数组返回 return [maxAccount]; }
额外场景:多个账户余额同为最高
如果存在多个账户余额并列最高,可以一次性收集所有符合条件的账户:
function getClientWithGreatestBalance(bankAccounts) { if (bankAccounts.length === 0) return []; // 先获取所有账户中的最高余额值 const maxBalance = Math.max(...bankAccounts.map(account => account.balance)); // 筛选出所有余额等于最高值的账户 return bankAccounts.filter(account => account.balance === maxBalance); }
内容的提问来源于stack exchange,提问作者OldsoulPhil
相关产品推荐
相关产品推荐

