You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用find与箭头函数 用reducer累加对象数组相同属性值

兼容旧设备的实现方案

你可以把find方法替换为普通的for循环遍历查找匹配项,所有语法均采用ES5规范,无需依赖新的数组方法和箭头函数,即可实现相同的聚合效果:

var data = [
  { DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 },
  { DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 },
  { DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 },
  { DishName: '38. King Prawn Vindaloo', Qty: 1, Cooked: 1, NotCooked: 0 },
  { DishName: '35. Chicken Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 },
  { DishName: '36. Lamb Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 },
  { DishName: '37. Prawn Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 },
  { DishName: 'Chicken Tikka Vindaloo', Qty: 1, Cooked: 0, NotCooked: 1 },
];

var res = data.reduce(function(acc, obj) {
  var existItem = null;
  // 普通for循环替代find方法,兼容旧环境
  for (var i = 0; i < acc.length; i++) {
    if (acc[i].DishName === obj.DishName) {
      existItem = acc[i];
      break;
    }
  }

  if (existItem) {
    existItem.Qty += obj.Qty;
    existItem.Cooked += obj.Cooked;
    existItem.NotCooked += obj.NotCooked;
    return acc;
  }
  // 若需避免修改原数组对象,可替换为浅拷贝后push:acc.push({DishName: obj.DishName, Qty: obj.Qty, Cooked: obj.Cooked, NotCooked: obj.NotCooked})
  acc.push(obj);
  return acc;
}, []);

console.log(res);

补充说明

  • 上述代码完全遵循ES5语法标准,支持IE9及以上所有旧版浏览器
  • 最终输出结果和你原有实现的运行结果完全一致

内容的提问来源于stack exchange,提问作者user16824066

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:18:00