如何为javascript排序函数制作一个高效的比较器来对字符串数组进行排序
How to make a efficient comparator for javascript sort function for sorting an array of strings?
我有一个字符串数组,看起来像:
array = ['third', 'first', 'fourth', 'second', 'custom2', 'custom1']
我想对这个数组进行排序,所以它看起来像:
array = ['first', 'second', 'third', 'fourth', 'custom2', 'custom1']
特定字符串,如"第一个"、"第二个"应该按给定的顺序排序(第一个在第二个之前第三个…),任何其他字符串都应该按任意顺序附加在末尾。一个只包含这些字符串子集的数组应该按正确的顺序排序:
['fourth', 'something', 'second'] => ['second', 'fourth', 'something']
我想知道是否有可能为javascript sort()函数编写一个比较器函数,从而有效地解决这个问题。
这样的东西?
array = ['third', 'first', 'fourth', 'second', 'custom2', 'custom1']
special = ['first', 'second', 'third', 'fourth']
array.sort(function(a, b) {
var ia = special.indexOf(a)
var ib = special.indexOf(b)
if(ia >= 0 && ib >= 0) return ia - ib;
if(ia >= 0) return -1;
if(ib >= 0) return +1;
return a > b ? 1 : a == b ? 0 : -1;
})
console.log(array)
[
"first",
"second",
"third",
"fourth",
"custom1",
"custom2"
]
或者,更好的是,使用施瓦茨变换:
a = array.map(function(x) {
var n = special.indexOf(x);
return [n < 0 ? array.length : n, x]
}).sort(function(a, b) {
return (a[0] - b[0]) || (a[1] > b[1] ? 1 : a[1] == b[1] ? 0 : -1);
}).map(function(x) {
return x[1]
})
相关文章:
- Backbone.js比较器函数是'工作不正常
- 在获取后将新模型准备到集合中(不带比较器)
- 主干中的比较器在添加新模型时需要排序调用
- 迁移到AngularJS 1.2会破坏可排序包装器指令
- Linqjs 与比较器问题相交
- 记住比较器函数的参数顺序的技巧是什么
- 覆盖主干网.js比较器
- Backbone.js-排序和迭代-比较器不工作
- LINQ.JS,Except的比较器选择器
- 使用“”对字符串进行排序;小于/大于“;比较器中的比较运算符
- 主干:使用比较器反向采集顺序
- 将两个模型与一个模型传递到主干比较器,并进行字母数字排序
- 如何为javascript排序函数制作一个高效的比较器来对字符串数组进行排序
- 如何使用比较器按多个属性排序
- 使用比较器排序是否比使用key- function排序更好?
- 自定义javascript字符串排序比较器
- js比较器函数,如何实现降序排序
- JavaScript通过一些比较器对DOM元素进行排序,不需要jQuery
- Javascript排序对象值,有多个含义(组),只有比较器
- Javascript排序自定义比较器函数-排序一个排序数组