假设我有一个字符串数组:
async.parallel
我可以使用管道按字母顺序排序:
this.data = [ 'cupcake', 'donut', 'eclair', 'froyo', 'gingerbread', 'icecream', 'lollipop', 'marshmallow', 'nougat', 'oreo' ]
我的问题是我怎么能用自定义的字母顺序对它们进行排序,例如我想首先显示“e”,然后是“g”,然后是“m”等。所以顺序看起来像:eclair,gingerbread,棉花糖和其他可以按字母顺序或其他指定的顺序?
感谢您的帮助!
答案 0 :(得分:3)
花了一些时间想出一个表达它的好方法。
请注意,在此实施中,e
始终位于a
前面,因此ee
会在ea
前面排序
var data = [ 'cupcake', 'donut', 'eclair', 'froyo', 'gingerbread', 'icecream', 'lollipop', 'marshmallow', 'nougat', 'oreo' ]
data.sort(function(a, b) {
var i = 0;
while (true) {
if (i > a.length && i > b.length) return 0;
else if (i > a.length) return -1;
else if (i > b.length) return 1;
else {
var compare = compareChar(a.charAt(i), b.charAt(i));
if (compare != 0) return compare;
i++;
}
}
function compareChar(a, b) {
var special = ["e", "g", "m"];
var ia = special.indexOf(a);
var ib = special.indexOf(b);
if (ia != -1 && ib != -1) { // both special char
return (ia == ib) ? 0 : (ia < ib) ? -1 : 1;
}
else if (ia != -1 && ib == -1) {
return -1;
}
else if (ia == -1 && ib != -1) {
return 1;
}
else {
return (a == b) ? 0 : (a < b) ? -1 : 1;
}
}
});
document.body.innerHTML = data.toString();