【问题标题】:How to define custom sort function in javascript?如何在javascript中定义自定义排序功能?
【发布时间】:2011-06-27 12:48:53
【问题描述】:

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

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

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

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

我需要这样的东西:

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

有什么想法吗?

【问题讨论】:

标签: javascript function sorting autocomplete


【解决方案1】:

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

【讨论】:

  • 颠倒顺序。
【解决方案2】:

或更短

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

【讨论】:

  • return function(a,b) { return (a[field] &gt; b[field]) - (a[field] &lt; b[field]); } 是我猜你的意思。聪明的。使用示例可以解决这个问题,例如my_array.sort(sortBy('my_field'));
  • 我喜欢算术运算。看起来比显式检查/返回更整洁。
【解决方案3】:

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

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

More Info here on Array.sort.

【讨论】:

  • 自定义 sort() 调用很有用,但此示例具有误导性。比较函数不应返回布尔值,而应返回有符号整数,其中负返回值表示 x y,0 表示 x = 0。例如,如果 x 和 y 是整数,则很容易编写这样的函数 function(x, y) { return x - y; }
  • 你是对的,泰勒!当我看到接受的解决方案时,我想评论更正,但你先做了。
  • @Tyler 我认为您的意思是返回值 0 表示 x=y,而不是 x=0。
  • @abw333 是的!那是一个错字。太糟糕了,我不能再编辑那条评论了。
  • 啊!我只花了 10 分钟试图弄清楚为什么我的排序不起作用。我们可以改正这个错字吗?它必须在谷歌上排名很高才能让我找到它。
【解决方案4】:
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 中排序的自定义实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 2020-11-07
  • 2016-12-19
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多