我有一组像这样的对象:
0: Object
1: Object
2: Object
3: Object
4: Object
然后当你打开每个对象时,我有一些数据如下:
id: "restore-product"
result: 0
目前数据输出如上所述,但我希望能够操作它,这样我就能得到返回的对象数组,如下所示:
[[id:"restore-product",result:0],[id:"enhance-product",result:20]]
然后,当时间到了,我可以遍历每个项目并从对象中找到最高值并获得该最高值的id。
目前我有这个功能将项目推送到数组中:
var amounts = [];
$.each(entries, function(i, entry){
amounts.push(entry);
});
==在这里编辑===
这是我用来获得最高价值的东西:
var lowest = Number.POSITIVE_INFINITY;
var highest = Number.NEGATIVE_INFINITY;
var tmp;
for (var i=entries.length-1; i>=0; i--) {
tmp = entries[i].result;
if (tmp < lowest) lowest = tmp;
if (tmp > highest) highest = tmp;
}
console.log(highest, lowest);
有人能指出我正确的方向吗?
答案 0 :(得分:0)
使用匹配的ID找到最高值的方法要简单得多。只需设置两个跟踪器变量,并在移动数组时更新它们。
var id = null;
var localMax = Number.MIN_SAFE_INTEGER;
for (var i = 0; i < entries.length; i++) {
var obj = objects[i];
if (obj.result > localMax) {
id = obj.id;
localMax = obj.result;
}
}
答案 1 :(得分:0)
你需要的功能是这样的:
function getIdFromMaximumResult(arr) {
var id, maxResult = Number.MIN_SAFE_INTEGER;
$.each(arr, function(i, object) {
if (object.result > maxResult) {
maxResult = object.result;
id = object.id;
}
});
return id;
}
答案 2 :(得分:0)
最简单的方法是对数组进行排序,并从结果中获取最后一个(升序排序)或第一个(降序排序)值。
升序排序
var sorted = yourArray.sort(function(a, b) {
return a.result < b.result ? -1 : +(a.result > b.result);
}),
highest = sorted[sorted.length - 1];
console.log(highest.id);
您也可以使用sorted.pop()
,但请注意,这实际上也会从原始数组中删除该项目。
降序排序
var sorted = yourArray.sort(function(a, b) {
return a.result > b.result ? -1 : +(a.result < b.result);
}),
highest = sorted[0];
console.log(highest.id);
您也可以使用sorted.shift()
,但请注意,这实际上也会从原始数组中删除该项目。
如果您需要任何进一步的操作,例如获取其结果与最高值匹配的所有id(如果有的话),您现在可以使用其他数组方法,例如filter
。
var sameResult = yourArray.filter(function(data) {
return data.result === highest.result;
});
console.log(sameResult);
如果您想要一个只包含id的数组,请使用map
var idOnly = sameResult.map(function(data) {
return data.id;
});
console.log(idOnly);
答案 3 :(得分:0)
您可以使用Array.prototype.reduce()
var minMax = data.reduce(function(minMax, curr){
minMax.min = curr.result < minMax.min ? curr.result : minMax.min;
minMax.max = curr.result > minMax.max ? curr.result : minMax.max;
return minMax;
},{min:Number.POSITIVE_INFINITY, max: Number.MIN_SAFE_INTEGER} );
console.log(minMax)// {min:0, max:323}