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

Angular中按父ID分组计算子数组test_per_day最小值的实现问题

解决Angular中计算每个ID对应最小test_per_day的问题

嘿,我来帮你搞定这个计算最小值的问题!你之前的代码只是把所有test_per_day都塞进数组里,但没针对每个ID单独处理最小值,这就导致没法把ID和对应的最小值关联起来。咱们换个更清晰的方式来实现:

核心思路

我们可以用Array.map()遍历原始数据的每个对象,对每个对象的areas数组提取所有test_per_day值,再计算出最小值,最后把ID和最小值组合成新对象存入结果数组。

完整实现代码

// 假设你的原始数据存在this.myData中
const minTestResults = this.myData.map(item => {
  // 提取当前ID下所有areas的test_per_day数值
  const dailyTestValues = item.areas.map(area => area.test_per_day);
  
  // 计算最小值,同时处理areas为空的边界情况
  const minDailyTest = dailyTestValues.length > 0 
    ? Math.min(...dailyTestValues) 
    : 0; // 这里可以换成你需要的默认值,比如null或者Infinity

  return {
    id: item.id,
    min_test_per_day: minDailyTest
  };
});

// 打印结果看看
console.log(minTestResults);

运行这段代码后,你会得到这样的结果数组:

[
  { id: 'N5604-E', min_test_per_day: 22 },
  { id: 'RSP4-E', min_test_per_day: 12 }
]

另一种用reduce的实现方式(适合更复杂的场景)

如果你担心Math.min(...array)在数组过大时的性能问题,或者想更灵活地处理最小值计算,可以用Array.reduce():

const minTestResults = this.myData.map(item => {
  const minDailyTest = item.areas.reduce((currentMin, area) => {
    return area.test_per_day < currentMin ? area.test_per_day : currentMin;
  }, Infinity); // 初始值设为Infinity,确保第一个数值能替换它

  // 同样处理空数组的情况
  const finalMin = item.areas.length === 0 ? 0 : minDailyTest;

  return {
    id: item.id,
    min_test_per_day: finalMin
  };
});

为什么之前的代码没达到效果?

你之前的循环只是把所有ID和所有test_per_day分别存入两个数组,但没有建立ID和对应最小值的关联,也没做最小值的计算逻辑。现在的方法通过map直接把每个ID和它对应的最小值绑定成对象,逻辑更清晰,结果也完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:22:50