合并多对象并提取各属性的最大值
嵌套对象属性的最大值归约实现
你的核心需求是对每个顶层属性(如prop1、prop2)下的子属性(x、y)分别提取所有版本对象中的最大值,最终合并成一个单一对象。
原代码的问题
你当前的代码存在两个关键错误:
- 直接比较两个对象(
highest > value)——JavaScript中对象比较的是引用地址,而非属性值,这会导致逻辑完全失效 - 未深入到子属性层级,无法针对
x、y分别计算最大值
修正后的实现代码
Object.values(input).reduce((highestValues, objData) => { Object.entries(objData).forEach(([propKey, propValue]) => { // 初始化当前属性的最大值容器 if (!highestValues[propKey]) { highestValues[propKey] = { ...propValue }; return; } // 遍历子属性,逐个更新最大值 Object.entries(propValue).forEach(([subKey, subValue]) => { if (subValue > highestValues[propKey][subKey]) { highestValues[propKey][subKey] = subValue; } }); }); return highestValues; }, {});
代码逻辑说明
- 提取版本对象数组:用
Object.values(input)把输入对象的所有版本(如1.0、2.0对应的对象)提取为数组 - 累积最大值结果:外层
reduce用来逐步构建最终的最大值对象 - 处理每个顶层属性:
- 如果结果对象中还没有当前属性,先复制该属性的所有子值作为初始最大值
- 遍历该属性的子属性(
x、y),将当前值与结果中已有的值比较,保留更大的那个
- 返回迭代结果:每次
reduce迭代后返回更新后的最大值对象
这段代码具备通用性,即使后续新增其他子属性(如z),也能自动适配,无需修改核心逻辑。
内容的提问来源于stack exchange,提问作者Leonardo Specioso
相关产品推荐
相关产品推荐

