按属性值排序对象

时间:2012-01-23 01:06:10

标签: javascript jquery sorting

我在数组中有一些对象,并希望对它们进行排序。应按度量值对对象进行排序。所以我有以下功能:

    objectz.sort(function(a,b){
        return b.metric - a.metric;
    }

问题是某些对象具有相同的属性值,并且排序的结果总是不同。我想通过其name属性对具有相同度量值的对象进行额外排序,因此每次都得到相同的对象顺序我把它们排序。

提前谢谢!

2 个答案:

答案 0 :(得分:2)

objectz.sort(function(a,b){
    var result = b.metric - a.metric;
    if (!result) return a.name > b.name ? 1 : -1;
    return result;
});

答案 1 :(得分:0)

与zerkms类似:

objectz.sort(function(a,b) {
    var x = b.metric - a.metric; 
    return x || b.name - a.name;
});

似乎是一种反向排序(首先出现更高的值),这是你想要的吗?

修改

请注意,-运算符仅适用于'name'的值可以转换为数字的情况。否则,请使用<>。 sort函数应该处理a.name == b.name,> opertator本身不会这样做,所以你需要这样的东西:

objectz.sort(function(a,b) {
    var x = b.metric - a.metric; 

    // If b.metric == a.metric
    if (!x) {

      if (b.name == a.name) {
        x = 0;

      else if (b.name < a.name) {
        x = 1;

      else {
        x = -1;
      }
    }
    return x;
});

可以更简洁:

objectz.sort(function(a,b) {
    var x = b.metric - a.metric; 

    if (!x) {
      x = (b.name == a.name)? 0 : (b.name < a.name)? 1 : -1;
    }
    return x;
});

鉴于metric比较似乎是最小到最小的顺序,那么三元的表现应该是:

      x = (b.name == a.name)? 0 : (b.name < a.name)? -1 : 1;

如果需要说塞尔达来到安。此外,name的值应该减少到所有小写(或全部大写),否则'zelda'和'Ann'将按照与'Zelda'和'ann'相反的顺序排序

相关问题