JavaScript .sort override



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

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

我已经弄清楚,按ID号排序,我只是使用JavaScript函数.sort(),但我无法弄清楚如何按区域排序字符串(例如:"工作室等")。

我想要得到的是:

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

"Active"部分将始终保持不变。

从我在网上找到的,我必须做一个.sort()覆盖方法来排序,但我不能弄清楚我需要在覆盖方法内改变什么。

给你的例子

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

你可以创建一个对象来描述你的数据。示例

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. 

Array将自动按照返回顺序排序希望对你有帮助。

您可以为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()

您不需要重写任何内容,只需传递.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"]
//

最新更新