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

如何用一次reduce方法从对象数组生成两个独立数组?

合并两次reduce操作实现宠物主人分类

先补充原代码中缺失的推荐食量计算逻辑(通常宠物推荐食量可通过体重公式推导,这里采用weight^0.75 * 28作为示例),然后通过单次reduce完成两类主人的分类:

const dogs = [
  { weight: 22, curFood: 250, owners: ['Alice', 'Bob'] },
  { weight: 8, curFood: 200, owners: ['Matilda'] },
  { weight: 13, curFood: 275, owners: ['Sarah', 'John'] },
  { weight: 32, curFood: 340, owners: ['Michael'] },
];

// 计算每只狗的推荐食量(公式可根据实际需求调整)
dogs.forEach(dog => {
  dog.recommended = Math.trunc(dog.weight ** 0.75 * 28);
});

// 单次reduce实现分类
const [ownersEatTooMuch, ownersEatTooLess] = dogs.reduce(([tooMuch, tooLess], dog) => {
  const upperLimit = dog.recommended * 1.1;
  const lowerLimit = dog.recommended * 0.9;

  if (dog.curFood > upperLimit) {
    tooMuch.push(...dog.owners); // 直接展开主人数组,避免后续flat()
  } else if (dog.curFood < lowerLimit) {
    tooLess.push(...dog.owners);
  }

  return [tooMuch, tooLess]; // 返回更新后的累加器
}, [[], []]);

console.log(ownersEatTooMuch); // 输出喂食过量的主人列表
console.log(ownersEatTooLess); // 输出喂食不足的主人列表

核心逻辑说明

  • 初始值[[], []]作为累加器,解构后分别对应tooMuch(喂食过量主人数组)和tooLess(喂食不足主人数组)
  • 使用扩展运算符...展开dog.owners,直接将单个主人元素添加到目标数组,替代原代码中push后调用flat()的操作,提升效率
  • 每次迭代后返回更新后的数组对,作为下一轮循环的累加器
  • 提前计算推荐食量的上下阈值,避免重复运算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:10:06