Javascript 如何找到对象内部对象的最大属性和?
我有个问题,不知道怎么解决( 我有一个脚本,其中包含对象内部的对象,例如:Javascript 如何找到对象内部对象的最大属性和?,javascript,properties,sum,javascript-objects,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
var s = {
1: {
type: "main",
...
values: {
speed: 10,
dexterity: 5,
jump: 1
}
},
2: {
type: "main",
...
values: {
speed: 8,
dexterity: 3,
jump: 13
}
},
3: ...
}
我需要在s
对象中找到一个元素,该元素具有一些值的最大总和
对象属性
例如,我需要找到一个属性总和最高的对象speed
和dextrity
这里是1号元素,因为它的总和是10+5
,而不是2号元素,2号元素的总和是8+3
,给定上述代码
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]];
试试这个:
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;
}
演示:
它将返回总数最高的对象的键(1
、2
、3
,等等)
您可以将其称为
getMax(s);
这里有一种方法可以找到它,它允许您从预定义的属性中选择要求和的属性
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
我看到你正在使用递增的非负整数作为对象的属性。为什么不使用数组呢?@RickViscomi,它可以来自数据库,并且是一个自动递增的主数组key@RickViscomi,我所用的整数只是一个例子。这里没有数字,而是一些标题OK,只是一个观察如果这些是公共对象,你可以考虑添加一个自定义的<代码> Value> <代码> >方法,返回代码> Test.Frase+这个.Dealthys @ LAN,坦白地说,我不想在对象中使用循环超过1000个项目。@ NikitaShelimov,不管你愿不愿意,它们都会被你的代码明确地使用,或者在内部被一个对象的SPECF使用。ic方法。@NikitaShelimov我更新了我的答案,不再使用
参数
做太多的工作,假设我们只使用速度
和灵巧性
。下面是一个jsperf,它显示我的两个函数都比过滤器
解决方案快:。很难真正测试,因为对象只有3项,而不是10项00@lan事实上,循环速度更快。:)