【发布时间】:2019-05-15 07:16:26
【问题描述】:
我正在尝试按照以下顺序进行自定义排序
- 特殊字符(- 第一个,_ 最后一个)
- 数字
- 字母表
例如,如果我在下面排序
var words = ['MBC-PEP-1', 'MBC-PEP01', 'MBC-PEP91', 'MBC-PEPA1', 'MBC-PEPZ1', 'MBC-PEP_1'];
结果应该是
MBC-PEP-1,MBC-PEP_1,MBC-PEP01,MBC-PEP91,MBC-PEPA1,MBC-PEPZ1
通过使用我的代码,结果如下
"MBC-PEP-1", "MBC-PEP01", "MBC-PEP91", "MBC-PEP_1", "MBC-PEPA1", "MBC-PEPZ1"
但是我需要上面的排序顺序,不知道怎么实现。
function MySort(alphabet)
{
return function(a, b) {
var lowerA = a.toLowerCase()
var lowerB = b.toLowerCase()
var index_a = alphabet.indexOf(lowerA[0]),
index_b = alphabet.indexOf(lowerB[0]);
if (index_a === index_b) {
// same first character, sort regular
if (a < b) {
return -1;
} else if (a > b) {
return 1;
}
return 0;
} else {
return index_a - index_b;
}
}
}
var items = ['MBC-PEP-1', 'MBC-PEP01', 'MBC-PEP91', 'MBC-PEPA1', 'MBC-PEPZ1', 'MBC-PEP_1'],
sorter = MySort('-_0123456789abcdefghijklmnopqrstuvwxyz');
console.log(items.sort(sorter));
【问题讨论】:
标签: javascript arrays sorting vue.js lodash