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

如何获取对象数组中各唯一versionID对应最高versionNR的对象

按versionID分组并保留最高versionNR的对象

我来帮你解决这个问题!你的核心需求是按versionID分组,每组只保留versionNR最大的对象,原来的代码只取了每个分组的第一个元素,所以我们需要调整逻辑来跟踪最大版本号的对象。

jQuery 解决方案

var arr = [{ "id": 1, "versionID": 1, "versionNR": 1, "format": "<div><label for=\"Part_1\">Part 1</label><input data-id=\"1\" id=\"Part_1\" type=\"checkbox\" /></div>" }, { "id": 65, "versionID": 65, "versionNR": 1, "format": "<div><label for=\"Part_65\">Part 2</label><input data-id=\"65\" id=\"Part_65\" type=\"checkbox\" /></div>" }, { "id": 92, "versionID": 1, "versionNR": 2, "format": "<div><label for=\"Part_92\">Part 1</label><input data-id=\"92\" id=\"Part_92\" type=\"checkbox\" /></div>" }, { "id": 93, "versionID": 65, "versionNR": 2, "format": "<div><label for=\"Part_93\">Part 2</label><input data-id=\"93\" id=\"Part_93\" type=\"checkbox\" /></div>" }, { "id": 96, "versionID": 65, "versionNR": 3, "format": "<div><label for=\"Part_96\">Part 2</label><input data-id=\"96\" id=\"Part_96\" type=\"checkbox\" /></div>" }];

var result = {};
$.each(arr, function(i, el) {
  // 要么当前versionID未记录,要么当前元素的versionNR更大时,更新记录
  if (!result[el.versionID] || el.versionNR > result[el.versionID].versionNR) {
    result[el.versionID] = el;
  }
});
// 将结果对象转换为数组
var singles = Object.values(result);
console.log(singles);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

逻辑说明

  • 用result对象作为临时存储,键是versionID,值是该ID下当前找到的versionNR最大的对象
  • 遍历数组时,对每个元素做两个判断:
    1. 如果这个versionID还没在result里,直接存入
    2. 如果已经存在,就比较当前元素的versionNR和result中对应对象的versionNR,如果更大就替换旧对象
  • 最后用Object.values()把result中的值提取为数组,就是你要的最终结果

原生JavaScript 解决方案(无需jQuery)

如果你不想依赖jQuery,也可以用原生的reduce方法实现相同逻辑:

const arr = [{ "id": 1, "versionID": 1, "versionNR": 1, "format": "&lt;div&gt;&lt;label for=\"Part_1\"&gt;Part 1&lt;/label&gt;&lt;input data-id=\"1\" id=\"Part_1\" type=\"checkbox\" /&gt;&lt;/div&gt;" }, { "id": 65, "versionID": 65, "versionNR": 1, "format": "&lt;div&gt;&lt;label for=\"Part_65\"&gt;Part 2&lt;/label&gt;&lt;input data-id=\"65\" id=\"Part_65\" type=\"checkbox\" /&gt;&lt;/div&gt;" }, { "id": 92, "versionID": 1, "versionNR": 2, "format": "&lt;div&gt;&lt;label for=\"Part_92\"&gt;Part 1&lt;/label&gt;&lt;input data-id=\"92\" id=\"Part_92\" type=\"checkbox\" /&gt;&lt;/div&gt;" }, { "id": 93, "versionID": 65, "versionNR": 2, "format": "&lt;div&gt;&lt;label for=\"Part_93\"&gt;Part 2&lt;/label&gt;&lt;input data-id=\"93\" id=\"Part_93\" type=\"checkbox\" /&gt;&lt;/div&gt;" }, { "id": 96, "versionID": 65, "versionNR": 3, "format": "&lt;div&gt;&lt;label for=\"Part_96\"&gt;Part 2&lt;/label&gt;&lt;input data-id=\"96\" id=\"Part_96\" type=\"checkbox\" /&gt;&lt;/div&gt;" }];

const result = arr.reduce((acc, el) => {
  if (!acc[el.versionID] || el.versionNR > acc[el.versionID].versionNR) {
    acc[el.versionID] = el;
  }
  return acc;
}, {});

const singles = Object.values(result);
console.log(singles);

两种方案最终都会输出你期望的结果:

[{ "id": 92, "versionID": 1, "versionNR": 2, "format": "&lt;div&gt;&lt;label for=\"Part_92\"&gt;Part 1&lt;/label&gt;&lt;input data-id=\"92\" id=\"Part_92\" type=\"checkbox\" /&gt;&lt;/div&gt;" },{ "id": 96, "versionID": 65, "versionNR": 3, "format": "&lt;div&gt;&lt;label for=\"Part_96\"&gt;Part 2&lt;/label&gt;&lt;input data-id=\"96\" id=\"Part_96\" type=\"checkbox\" /&gt;&lt;/div&gt;" }]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:04:06