【问题标题】:JavaScript .sort overrideJavaScript .sort 覆盖
【发布时间】:2014-05-20 15:25:24
【问题描述】:

我有一个字符串数组,除了部分之外,它们都相似,例如:

["1234 - Active - Workroom", 
 "1224 - Active - Breakroom",
 "2365 - Active - Shop"]

我发现要按 ID 号排序,我只使用 JavaScript 函数.sort(),但我不知道如何按区域对字符串进行排序(例如:“Workroom etc..”)。

我想要得到的是:

["1224 - Active - Breakroom", 
 "2365 - Active - Shop", 
 "1234 - Active - Workroom"]

“活动”部分始终相同。

根据我在网上找到的,我必须创建一个.sort() 覆盖方法来对其进行排序,但我无法弄清楚我需要在覆盖方法中更改什么。

【问题讨论】:

  • 使用自定义函数和拆分进行排序。

标签: javascript arrays html sorting


【解决方案1】:

给你的例子

var items = [
  { name: "Edward", value: 21 },
  { name: "Sharpe", value: 37 },
  { name: "And", value: 45 },
  { name: "The", value: -12 },
  { name: "Magnetic" },
  { name: "Zeros", value: 37 }
];
items.sort(function (a, b) {
    if (a.name > b.name)
      return 1;
    if (a.name < b.name)
      return -1;
    // a must be equal to b
    return 0;
});

您可以制作 1 个对象来描述您的数据。 示例

data1 = { id : 12123, status:"Active", name:"Shop"}

You can implement your logic in sort(). 
Return 1 if a > b ; 
Return -1 if a < b 
Return 0 a == b. 

数组会在返回后自动排序 希望对您有所帮助。

【讨论】:

    【解决方案2】:

    你可以给sort方法一个比较两个项目并返回顺序的函数:

    yourArray.sort(function(item1, item2){
        // compares item1 & item2 and returns:
        //  -1 if item1 is less than item2
        //  0  if equal
        //  +1 if item1 is greater than item2
    });
    

    你的例子:

    yourArray.sort(function(item1, item2){
        // don't forget to check for null/undefined values
        var split1 = item1.split(' - ');
        var split2 = item2.split(' - ');
        return split1[2] < split2[2] ? -1 : (split1[2] > split2[2] ? 1 : 0);
    });
    

    Array.prototype.sort()

    【讨论】:

      【解决方案3】:

      您不必重写任何内容,只需传递将进行排序的 .sort 自定义函数:

      var rsortby = {
        id     : /^(\d+)/,
        name   : /(\w+)$/,
        status : /-\s*(.+?)\s*-/,
      };
      
      var r = rsortby['name'];
      
      [
        '1234 - Active - Workroom',
        '1224 - Active - Breakroom',
        '2365 - Active - Shop',
      ].
      sort(function(a, b) {
        var ma = a.match(r)[1];
        var mb = b.match(r)[1];
        return (ma != mb) ? (ma < mb ? -1 : 1) : 0;
      });
      
      // ["1224 - Active - Breakroom", "2365 - Active - Shop", "1234 - Active - Workroom"]
      //
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-08
        • 2010-10-30
        • 2010-12-16
        • 2021-01-26
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多