[Object { curr="SEK", antal=7}, Object { curr="JPY", antal=1}, Object { curr="DKK", antal=1}]
我可以创建一个新的数组并对其进行排序。但我想通过antal属性对对象数组进行排序。如何在纯JavaScript中做到这一点。如何以最优雅的方式从javascript中的对象数组中获取最大值?
没有jquery解决方案想要!
[Object { curr="SEK", antal=7}, Object { curr="JPY", antal=1}, Object { curr="DKK", antal=1}]
我可以创建一个新的数组并对其进行排序。但我想通过antal属性对对象数组进行排序。如何在纯JavaScript中做到这一点。如何以最优雅的方式从javascript中的对象数组中获取最大值?
没有jquery解决方案想要!
您可以使用自定义函数进行排序。
例如:
myArray.sort(function(a, b){
return a.antal - b.antal;
})
有关详细信息,请参阅教程Sorting an array of objects。
您的排序返回最低值第一 – Joe
好点。按降序排列,按照您的解决方案,需要翻转“a”和“b”。 –
function largestAntal(arr) {
var rv = null, max = null;
for (var i = 0; i < arr.length; ++i)
if (max === null || arr[i].antal > max) {
max = arr[i].antal;
rv = arr[i];
}
}
return rv;
}
如果你想要的只是最大“antal”值的对象,那将比排序更快。
您可以使用Array.sort
:
var a = [{ curr: "SEK", antal: 7}, { curr: "JPY", antal: 1}, { curr: "DKK", antal: 1}];
a.sort(function(left, right) { return left.antal < right.antal ? 1 : 0; })
这会给你:
[Object { curr="SEK", antal=7}, Object { curr="JPY", antal=1}, Object { curr="DKK", antal=1}]
如果你想让它周围的其他方式,正好与sort(..)
函数内部比较玩耍。
reduce将返回一个值,并且一次通过该数组。
VAR A = [{ CURR: “XEK”,安塔尔:2 },{ CURR: “SEK”,安塔尔:7 },{ CURR: “日元”,安塔尔:1 } {DKK“,antal:1 }];
var min= a.reduce(function(a, b){
return a.antal> b.antal? a:b;
});
* 警报( 'CURR =' + min.curr + '安塔尔=' + min.antal); 返回值>> CURR = SEK,安塔尔= 7 *
旧版本浏览器,你可以匀reduce-
if(![].reduce){
Array.prototype.reduce= function(fun, temp, scope){
var T= this, i= 0, len= T.length, temp;
if(typeof fun=== 'function'){
if(temp== undefined) temp= T[i++];
while(i < len){
if(i in T) temp= fun.call(scope, temp, T[i], i, T);
i++;
}
}
return temp;
}
}
你要哪做的:一个有序数组,或者与最大值的对象“antal”属性?问题标题说了一件事,但问题的文本说另一件事。 – Pointy
[如何对对象数组进行排序?](http://stackoverflow.com/questions/979256/how-to-sort-an-array-of-objects) – epascarello
“sort”函数需要一个可选函数来定义排序顺序;你可以实现你想要的任何东西。如果你只是想要最大的值,迭代,比较和保存具有最大'antal'值的对象。 –