JavaScript:从多组对象数组末尾元素中获取value最大值对象的问题
解决多组对象数组中获取value最大对象的问题
核心思路
先提取每组数组的最后一个元素,再从这些元素中筛选出value值最大的对象。
方法一:使用map + reduce
// 示例acc结构 const acc = [ [{key:1, value:3}, {key:1, value:6}], [{key:2, value:5}, {key:2, value:9}], [{key:3, value:1}, {key:3, value:2}] ]; // 提取每组最后一个元素 const lastItems = acc.map(group => group[group.length - 1]); // 遍历找到value最大的对象 const maxObj = lastItems.reduce((prev, curr) => { return curr.value > prev.value ? curr : prev; }); console.log(maxObj); // 输出 {"key":2,"value":9}
方法二:使用Math.max + find
如果习惯用Math.max,可以先提取所有value值找到最大值,再匹配对应的对象:
const lastItems = acc.map(group => group[group.length - 1]); const maxValue = Math.max(...lastItems.map(item => item.value)); const maxObj = lastItems.find(item => item.value === maxValue); console.log(maxObj); // 输出 {"key":2,"value":9}
处理边界情况
如果存在空数组的组,需要先过滤避免报错:
const validLastItems = acc .filter(group => group.length > 0) // 过滤空数组 .map(group => group[group.length - 1]); if (validLastItems.length === 0) { console.log("无有效数据"); } else { const maxObj = validLastItems.reduce((prev, curr) => { return curr.value > prev.value ? curr : prev; }); console.log(maxObj); }
为什么之前的Math.max不生效?
你之前只传入了单个组的最后一个value(acc[acc.length - 1].value),而Math.max需要接收所有待比较的数值集合。通过扩展运算符...把所有value展开成参数,就能正常使用Math.max了。
内容的提问来源于stack exchange,提问作者ASHafizullah
相关产品推荐
相关产品推荐

