如何找到对象内部最大的属性总和?

时间:2013-04-30 19:23:27

标签: javascript properties sum javascript-objects

我遇到了问题,不知道如何解决。 :(

我在对象内部有一个脚本对象,例如:

var s = {
  1: {
    type: "main",
    ...
    values: {
      speed: 10,
      dexterity: 5,
      jump: 1
    }
  },
  2: {
    type: "main",
    ...
    values: {
      speed: 8,
      dexterity: 3,
      jump: 13
    }
  },
  3: ...
}

我需要在s对象中找到一个具有一些values对象属性的最大总和的元素。

例如,我需要找到一个具有最高属性总和speeddexterity的对象。

这是元素1,因为它有总和10+5而不是2,其总和为8+3

3 个答案:

答案 0 :(得分:1)

试试这个:

function getMax(obj) {
    var max = 0;
    var maxKey;
    for (var key in obj) {
        var cur = obj[key];
        var values = cur.values;
        var total = values.speed + values.dexterity;
        if (total > max) {
            max = total;
            maxKey = key;
        }
    }
    return maxKey;
}

DEMO: http://jsfiddle.net/xn8WC/2/

它会返回总数最高的对象的密钥(123等)。

您可以将其称为getMax(s);

答案 1 :(得分:0)

以下是一种查找此功能的方法,可让您从预定义属性中进行选择以进行求和;

function largest(s, speed, dexterity, jump) {
    var i, j, b = {i: null, j: -Infinity};
    for (i in s) { // loop over every key
        j =   ((    speed || 0) && s[i].values.speed    ) // add chosen
            + ((dexterity || 0) && s[i].values.dexterity)
            + ((     jump || 0) && s[i].values.jump     );
        if (j > b.j) b.i = i, b.j = j; // if largest, remember
    }
    return b.i; // return key of largest
}

使用示例s

largest(s, 1, 1, 0); // 1
largest(s, 1, 0, 1); // 2

答案 2 :(得分:-1)

根据上面的代码,

var biggest= s[Object.keys(s).filter(function(a,b,c){ 
   a=s[a];
   return (b=a.values.speed + a.values.dexterity) > this[0] ?
      (this[0]=b) : 0;
}, [0]).slice(-1)[0]];