【问题标题】:How do I sort this array in JavaScript?如何在 JavaScript 中对这个数组进行排序?
【发布时间】:2010-12-29 06:12:25
【问题描述】:

如何对这个数组进行排序?

[
  {id : 1, start : 60, end : 120},
  {id : 2, start : 100, end : 240},
  {id : 3, start : 700, end : 720}
]

更新: 那么如果我的数组看起来像这样,我可以根据起始值对其进行排序吗?

[{
  1:{start : 60, end : 120},
  2:{start : 100, end : 240},
  3:{start : 700, end : 720}
}]

【问题讨论】:

    标签: javascript arrays sorting object


    【解决方案1】:

    你有一个对象数组。您必须指定要如何对其进行排序。

    无论如何,你可以使用sort方法:

    var data = [{id : 1, start : 60, end : 120}, {id : 2, start : 100, end : 240},{id : 3, start : 700, end : 720}];
    
    function sortByStart(a, b){
      return a.start - b.start;
    }
    
    data.sort(sortByStart);
    

    【讨论】:

    • 你甚至不需要命名比较函数。如果您不需要在其他地方进行比较,则可以将其用作匿名函数。 data.sort( function (a,b) {return a.id -b.id; };
    • 是的,当然,但我总是尽量避免使用匿名函数,因为它们会使代码更难阅读——你知道,程序员花在阅读代码上的时间比编写代码要多:)
    【解决方案2】:

    您可能想要一种方法来对可能的对象进行排序 具有相同的起始值:

        [
          {id : 1, start : 60, end : 120},
          {id : 2, start : 100, end : 240},
          {id : 3, start : 700, end : 720}
        ]
    
    A.sort(function(a, b){
        return a.start-b.start || a.end-b.end || a.id-b.id;
    });
    

    【讨论】:

      【解决方案3】:

      实际上,现在您从一个伪数组对象中获得了数组。但是您可以将该对象转换为真正的数组,对其进行排序,然后再转换回来:

      var originalArray = [{
          1:{start : 60, end : 120},
          2:{start : 700, end : 720},
          3:{start : 100, end : 240}
      }];
      var pseudoArray = originalArray[0];
      var arrayToSort = [];
      for (var key in pseudoArray) {
          arrayToSort.push(pseudoArray[key]);
      }
      arrayToSort.sort(function(left, right) {
          return left.start - right.start || left.end - right.end;
      });
      var resultPseudoArray = {};
      for (var i = 0; i < arrayToSort.length; i++) {
          resultPseudoArray[i + 1] = arrayToSort[i];
      }
      var resultArray = [resultPseudoArray];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多