0

我有一个问题,不知道如何解决。:(

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

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对象属性总和最大。

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

这是第 1 个元素,因为它有 sum10+5而不是第 2 个 sum 是8+3

4

3 回答 3

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

演示:http: //jsfiddle.net/xn8WC/2/

它将返回总数最高的对象的键( 12、等)。3

你这样称呼它getMax(s);

于 2013-04-30T19:34:46.517 回答
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
于 2013-04-30T19:58:06.330 回答
-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]];
于 2013-04-30T19:34:10.793 回答