按特定顺序javascript对数组进行排序

时间:2016-01-27 21:25:47

标签: javascript arrays

我有一个像这样的数组

arr1 = ["P2.13","P1.13","P4.13","P3.13", "P2.14","P2.14","P1.14","P4.14","P1.15","P2.15","P3.15","P4.15"];

如何按照FIRST之后的数字从13到15对数组进行排序,然后按" P"之后的数字排序。从1到4?最后我想要一个像这样的数组

arr2 = ["P1.13","P2.13","P3.13","P4.13","P1.14","P2.14","P3.14","P4.14","P1.15","P2.15","P3.15","P4.15"];

欣赏!!

2 个答案:

答案 0 :(得分:1)

将函数传递给arr1.sort(function(a, b) { return a.slice(-2) - b.slice(-2) || a[1] - b[1]; }); 。以下内容适用于所提供的精确测试用例,但如果输入更为通用,则需要进行修改。

arr1

请注意,这将 mutate @ApplicationPath("api") public class MyResourceConfig extends ResourceConfig {

答案 1 :(得分:0)

对于包含许多函数式编程的程序,我选择了Underscore库。 您可以通过加入它们来基于多个属性直接调用sortBy函数和hacky技巧。这是代码:

var sortedArray = _.sortBy(arr1, function(item) {
    var nums = item.split('.');
    return [nums[1], nums[0]].join("_");
});

但是,您仍然可以使用Javascript排序功能对自定义比较功能的列表进行排序。这是代码:

arr1.sort(function(x, y) {
  var numsX = x.split('.');
  var numsY = y.split('.');
  if (numsX[1] !== numsY[1]) { 
    return compare(numsX[1], numsY[1]);  // compare the number after dot first
  }
  return compare(numsX[0], numsY[0]); // compare the number before dot after
});

// General comparison function for convenience
function compare(x, y) {
  if (x === y) {
    return 0;
  }
  return x > y ? 1 : -1;
}

检查小提琴上的两个例子 Underscore sort vs Javscript sort

这是我的新帐户,我不具备发布2个以上链接的声誉。您可以搜索下划线库。

感谢。