如何在javascript中定义自定义排序功能?

kir*_*gan 58 javascript sorting autocomplete function

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

['White 023','White','White flower', 'Teatr']
Run Code Online (Sandbox Code Playgroud)

当我开始搜索从"te"子串开始的东西时,它向我显示如下的数组排序:

'White','White 023','White flower', 'Teatr'
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

 'Teatr','White','White 023','White flower'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

eri*_*ckb 70

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

对于a上的自定义排序函数Array,您可以使用任何JavaScript函数并将其作为参数传递给这样Arraysort()方法:

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);
Run Code Online (Sandbox Code Playgroud)

有关Array.sort的更多信息.

  • 自定义sort()调用很有用,但此示例具有误导性.比较函数不应返回布尔值,而应返回有符号整数,其中负返回值表示x <y,正表示x> y,0表示x = 0.例如,如果x和y是整数,则很容易写函数(x,y){return x - y; } (52认同)
  • @Tyler我认为你的意思是返回值为0表示x = y,而不是x = 0. (9认同)
  • @ abw333是的!那是一个错字.太糟糕了,我再也无法编辑那条评论了. (3认同)
  • 啊!我只花了10分钟试图弄清楚为什么我的排序不起作用。我们可以解决这个错字吗?我必须在Google上排名很高才能找到它。 (2认同)

Lio*_*rom 20

为了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;
    };
}
Run Code Online (Sandbox Code Playgroud)

  • 颠倒顺序。 (2认同)

小智 5

或更短

sortBy(field){
 return (a[field] > b[field]) - (a[field] < b[field])
}
Run Code Online (Sandbox Code Playgroud)

  • `return function(a,b) { return (a[field] &gt; b[field]) - (a[field] &lt; b[field]); }` 是我猜你的意思。聪明的。使用示例将收紧这一点,例如`my_array.sort(sortBy('my_field'));` (4认同)