【问题标题】:Sorting an array of objects numerically using inline function使用内联函数对对象数组进行数字排序
【发布时间】:2017-11-30 14:57:20
【问题描述】:

我有一个 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));

【问题讨论】:

    标签: javascript arrays sorting numbers


    【解决方案1】:

    使用- 运算符:

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

    如果sort的回调返回:

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

    注意:上面的代码是对数组进行降序排序,如果要颠倒排序,则直接返回a.w * a.h - b.w * b.h即可。

    【讨论】:

      【解决方案2】:

      你需要使用减号,检查这个sn-p

        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);

      【讨论】:

        猜你喜欢
        • 2015-12-30
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 2013-06-29
        • 2011-12-31
        • 1970-01-01
        相关资源
        最近更新 更多