jquery - 获取对象数组中唯一值的最高值

标签 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 dupes = {};
var singles = [];

$.each(arr, function(i, el) {

    if (!dupes[el.versionID]) {
        dupes[el.versionID] = true;
        singles.push(el);
    }
});

console.log(singles)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我想要实现的是每个唯一的versionID并返回具有最高versionNR的对象

我想要的结果是:

var arr = [{
  "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": 96,
  "versionID": 65,
  "versionNR": 3,
  "format": "<div><label for=\"Part_96\">Part 2</label><input data-id=\"96\" id=\"Part_96\" type=\"checkbox\" /></div>"
}]
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

正如您在第一个代码示例中看到的,它返回正确的 versionID = 1 & 65,但 versionNR1 并且不是最高的。

我很难得到我想要的结果。有人可以帮我吗?

最佳答案

您可以使用array#reduce根据versionID对数组进行分组。如果对象已包含 versionID,则比较 versionNR 并存储具有最高值的那个。

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 = Object.values(arr.reduce((r,o) => {
  if(o.versionID in r) {
    if(o.versionNR > r[o.versionID].versionNR)
      r[o.versionID] = Object.assign({},o);
  } else {
    r[o.versionID] = Object.assign({}, o);
  }
  return r;
},{}));

console.log(result)

关于jquery - 获取对象数组中唯一值的最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223112/

相关文章:

php - 用通配符和 php 抓取

javascript - 我们可以使用 jquery 启用浏览器位置吗

javascript - 在 Node JS 中使用服务器发送事件未在客户端接收数据

javascript - 显示 jquery-ui 对话框时出现重复的标题栏

jquery - mouseenter 和 mouseleave 事件不适用于混合图像

jquery - 使用 jquery 选中和取消选中 CheckBox

javascript - Jquery密码(4位数字)验证

javascript - anchor 链接在另一个页面中打开灯箱

jquery - 当鼠标下方的元素移动时,如何阻止 mousemove() 执行?

php - 根据 WooCommerce 产品类型显示或隐藏管理自定义设置字段