如何仅遍历JavaScript对象数组中的单个对象计算结果?
针对单个对象执行计算的实现方案
你可以把原来的计算逻辑封装成独立函数,这样既能复用逻辑,又能单独针对某个对象执行计算,不用遍历整个数组。
具体实现:
- 抽离计算逻辑为独立函数
把原来嵌套在forEach里的计算逻辑单独拎出来,写成一个接收单个对象参数的函数:
function calculateResult(obj) { obj.result = 0; // 先重置结果,避免重复计算时累加旧值 obj.pts.forEach((c, i) => { if (i && c <= 4) { obj.result += c; } if (obj.pts[0] <= 3 && i === 0) { obj.result += obj.pts[0]; } }); }
- 单独调用函数计算单个对象
比如你要计算数组里的b[0],直接调用这个函数就行:
// 计算单个对象 calculateResult(b[0]); console.log(">> " + b[0].result + "<br/>");
- 保留批量计算能力(可选)
如果之后还需要批量处理整个数组,依然可以用forEach调用这个函数,逻辑和原来完全一致:
// 批量计算整个数组 b.forEach(calculateResult); console.log(">> " + b[0].result + "<br/>"); console.log(">> " + b[1].result + "<br/>"); console.log(">> " + b[2].result + "<br/>");
完整修改后的代码
b = []; b[0] = {}; b[0].pts = [1,4,8,12,1]; b[0].result = 0; b[1] = {}; b[1].pts = [2,1,3,2,10,12]; b[1].result = 0; b[2] = {}; b[2].pts = [5,1,9]; b[2].result = 0; // 封装好的计算函数 function calculateResult(obj) { obj.result = 0; obj.pts.forEach((c, i) => { if (i && c <= 4) { obj.result += c; } if (obj.pts[0] <= 3 && i === 0) { obj.result += obj.pts[0]; } }); } // 单个对象计算示例 calculateResult(b[0]); console.log(">> " + b[0].result + "<br/>"); // 批量计算示例(需要时取消注释) // b.forEach(calculateResult); // console.log(">> " + b[0].result + "<br/>"); // console.log(">> " + b[1].result + "<br/>"); // console.log(">> " + b[2].result + "<br/>");
内容的提问来源于stack exchange,提问作者London28
相关产品推荐
相关产品推荐

