如何展平对象数组以返回我需要的确切结果?

时间:2016-01-21 17:19:26

标签: javascript jquery arrays object

我有一组像这样的对象:

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);

有人能指出我正确的方向吗?

4 个答案:

答案 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}