我有以下数组:
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
,但 versionNR
是 1
并且不是最高的。
我很难得到我想要的结果。有人可以帮我吗?
最佳答案
您可以使用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/