我遇到了问题,不知道如何解决。 :(
我在对象内部有一个脚本对象,例如:
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,因为它有总和10+5
而不是2,其总和为8+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/
它会返回总数最高的对象的密钥(1
,2
,3
等)。
您可以将其称为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]];