JS for循环中赋值变量时无法正确push最低计数元素到目标数组求助
问题排查
你的代码存在3个核心问题:
- 循环逻辑冗余:仅需1层循环即可遍历
alph数组所有子项,不需要双层嵌套循环 - 未记录最小数值对应的完整子项:现有逻辑仅存储了最小计数值,没有同步保存该数值所属的整条元素
- 赋值逻辑缺失:没有给
lowestAlph属性赋值的有效逻辑,注释的push语句位置错误,放开后会将所有遍历过的元素全部存入,不符合需求
修正方案
基础实现(仅存第一个找到的最小元素)
const example = { alph: [ [["a"], ["b", "c"], ["d"], ["e", "f"], 23], [["g"], ["h", "j"], ["k"], ["l", "m"], 19], [["n"], ["o", "p"], ["q"], ["r", "s"], -2], [["t"], ["u", "w"], ["x"], ["y", "z"], 25] ], lowestAlph: [], calcLow: function () { // 初始化最小值、对应的完整元素 let lowestVal = this.alph[0][4]; let lowestItem = this.alph[0]; // 遍历所有子项更新最小值 for (let i = 1; i < this.alph.length; i++) { const currentVal = this.alph[i][4]; if (currentVal < lowestVal) { lowestVal = currentVal; lowestItem = this.alph[i]; } } // 存入属性 this.lowestAlph = [lowestItem]; return lowestItem; } } // 测试 console.log(example.calcLow()); // 输出:[["n"], ["o", "p"], ["q"], ["r", "s"], -2] console.log(example.lowestAlph); // 输出:[[["n"], ["o", "p"], ["q"], ["r", "s"], -2]]
支持多并列最小值的实现
如果存在多个计数值相同的最低元素,都需要存入的话,可以用更简洁的filter实现:
calcLow: function () { // 先找到最小数值 const lowestVal = Math.min(...this.alph.map(item => item[4])); // 过滤所有符合条件的元素 this.lowestAlph = this.alph.filter(item => item[4] === lowestVal); return this.lowestAlph; }
极简reduce实现
如果只需要取第一个最小元素,用reduce可以一行完成遍历逻辑:
calcLow: function () { const lowestItem = this.alph.reduce((prev, curr) => curr[4] < prev[4] ? curr : prev); this.lowestAlph = [lowestItem]; return lowestItem; }
内容的提问来源于stack exchange,提问作者chessplayer
相关产品推荐
相关产品推荐

