如何在 javascript 中定义自定义排序函数?

我使用 atoComplete.jquery 插件建议输入文本,结果得到这个数组:

['White 023','White','White flower', 'Teatr']

当我开始搜索从 te子字符串开始的内容时,它会像下面这样显示数组排序:

'White','White 023','White flower', 'Teatr'

我需要这样的东西:

 'Teatr','White','White 023','White flower'

有什么想法吗?

148658 次浏览

It could be that the plugin is case-sensitive. Try inputting Te instead of te. You can probably have your results setup to not be case-sensitive. This question might help.

For a custom sort function on an Array, you can use any JavaScript function and pass it as parameter to an Array's sort() method like this:

var array = ['White 023', 'White', 'White flower', 'Teatr'];


array.sort(function(x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});


// Teatr White White 023 White flower
document.write(array);

More Info here on Array.sort.

For Objects try this:

function sortBy(field) {
return function(a, b) {
if (a[field] > b[field]) {
return -1;
} else if (a[field] < b[field]) {
return 1;
}
return 0;
};
}

or shorter

function sortBy(field) {
return function(a, b) {
return (a[field] > b[field]) - (a[field] < b[field])
};
}


let myArray = [
{tabid: 6237, url: 'https://reddit.com/r/znation'},
{tabid: 8430, url: 'https://reddit.com/r/soccer'},
{tabid: 1400, url: 'https://reddit.com/r/askreddit'},
{tabid: 3620, url: 'https://reddit.com/r/tacobell'},
{tabid: 5753, url: 'https://reddit.com/r/reddevils'},
]


myArray.sort(sortBy('url'));
console.log(myArray);

function msort(arr){
for(var i =0;i<arr.length;i++){
for(var j= i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
var swap = arr[i];
arr[i] = arr[j];
arr[j] = swap;
}
}
}
return arr;
}