使用内联函数以数字方式对对象数组进行排序

时间:2017-11-30 14:57:21

标签: javascript arrays sorting numbers

我有一个js对象数组,我需要根据区域h * w进行排序。也就是说,每个对象都有{h,w}。我没有得到排序的数组。

我有一个如图所示的数组,

var blocks = [];

blocks.push({
  w: 320,
  h: 135
});
blocks.push({
  w: 320,
  h: 270
});
blocks.push({
  w: 320,
  h: 135
});
blocks.push({
  w: 320,
  h: 135
});
blocks.push({
  w: 320,
  h: 135
});

blocks.sort(function(a, b) {
  return (b.w * b.h < a.w * a.h);
});
console.log(JSON.stringify(blocks));

2 个答案:

答案 0 :(得分:3)

使用-运算符:

blocks.sort(function(a, b) {
    return b.w * b.h - a.w * a.h;
});

如果sort的回调返回:

  • 一个负数,然后sorta放在b
  • 之前
  • 0,然后ab相等,sort将决定谁在谁之前。
  • 正数,然后sortb放在a之前。

注意:上面的代码按降序对数组进行排序,如果要反转排序顺序,则只需返回a.w * a.h - b.w * b.h

答案 1 :(得分:1)

您需要使用减号运算符,请检查此代码段

&#13;
&#13;
  var blocks=[]
  blocks.push({
        w: 320,
        h: 135
    });
    blocks.push({
        w: 320,
        h: 270
    });        
        blocks.push({
        w: 320,
        h: 135
    });
        blocks.push({
        w: 320,
        h: 135
    });
        blocks.push({
        w: 320,
        h: 135
    });

blocks.sort(function(a, b) {
            return (b.w * b.h - a.w * a.h);
        });
console.log(blocks);
&#13;
&#13;
&#13;