2011-11-14 15 views
1
[Object { curr="SEK", antal=7}, Object { curr="JPY", antal=1}, Object { curr="DKK", antal=1}] 

我可以创建一个新的数组并对其进行排序。但我想通过antal属性对对象数组进行排序。如何在纯JavaScript中做到这一点。如何以最优雅的方式从javascript中的对象数组中获取最大值?

没有jquery解决方案想要!

+2

你要哪做的:一个有序数组,或者与最大值的对象“antal”属性?问题标题说了一件事,但问题的文本说另一件事。 – Pointy

+0

[如何对对象数组进行排序?](http://stackoverflow.com/questions/979256/how-to-sort-an-array-of-objects) – epascarello

+0

“sort”函数需要一个可选函数来定义排序顺序;你可以实现你想要的任何东西。如果你只是想要最大的值,迭代,比较和保存具有最大'antal'值的对象。 –

回答

3

您可以使用自定义函数进行排序。

例如:

myArray.sort(function(a, b){ 
    return a.antal - b.antal; 
}) 

有关详细信息,请参阅教程Sorting an array of objects

+0

您的排序返回最低值第一 – Joe

+0

好点。按降序排列,按照您的解决方案,需要翻转“a”和“b”。 –

0
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”值的对象,那将比排序更快。

0

您可以使用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(..)函数内部比较玩耍。

0

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; 
    } 
} 
相关问题