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

IT技术 javascript function sorting autocomplete
2021-02-03 07:07:05

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

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

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

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

我需要这样的东西:

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

有任何想法吗?

4个回答

可能是插件区分大小写。尝试输入Te而不是te. 您可能可以将结果设置为不区分大小写。这个问题可能会有所帮助。

对于 上的自定义排序函数Array,您可以使用任何 JavaScript 函数并将其作为参数传递给 anArraysort()方法,如下所示:

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);

更多关于 Array.sort 的信息。

你是对的泰勒!当我看到接受的解决方案时,我想评论更正,但你先做了。
2021-03-18 07:07:05
自定义 sort() 调用很有用,但此示例具有误导性。比较函数不应返回布尔值,而应返回有符号整数,其中负返回值表示 x < y,正值表示 x > y,0 表示 x = 0。例如,如果 x 和 y 是整数,则很容易编写这样的函数 function(x, y) { return x - y; }
2021-03-19 07:07:05
@abw333 是的!那是一个错字。太糟糕了,我无法再编辑该评论。
2021-03-22 07:07:05
@Tyler 我认为您的意思是返回值 0 表示 x=y,而不是 x=0。
2021-03-28 07:07:05
啊!我只花了 10 分钟试图弄清楚为什么我的排序不起作用。我们能改正这个错字吗?它必须在谷歌上排名很高才能找到它。
2021-04-11 07:07:05

为了Objects试试这个:

function sortBy(field) {
  return function(a, b) {
    if (a[field] > b[field]) {
      return -1;
    } else if (a[field] < b[field]) {
      return 1;
    }
    return 0;
  };
}
颠倒顺序。
2021-03-30 07:07:05

或更短

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);

我喜欢算术运算。看起来比显式检查/返回更整洁。
2021-03-23 07:07:05
return function(a,b) { return (a[field] > b[field]) - (a[field] < b[field]); }是我猜你的意思。聪明的。用法示例将收紧这一点,例如my_array.sort(sortBy('my_field'));
2021-04-01 07:07:05
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;
}
javascript 中的默认排序将比冒泡排序快得多。OP 要求自定义比较器,而不是 js 中排序的自定义实现。
2021-03-22 07:07:05