如何在javascript中定义自定义排序功能?
Posted
技术标签:
【中文标题】如何在javascript中定义自定义排序功能?【英文标题】:How to define custom sort function in 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'
有什么想法吗?
【问题讨论】:
您可以在此处找到有关该主题的一些有用答案:Sorting objects in an array by a field value in javascript 【参考方案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] > b[field]) - (a[field] < b[field]);
是我猜你的意思。聪明的。使用示例可以解决这个问题,例如my_array.sort(sortBy('my_field'));
我喜欢算术运算。看起来比显式检查/返回更整洁。【参考方案3】:
可能是插件区分大小写。尝试输入Te
而不是te
。您可能可以将结果设置为不区分大小写。这个question 可能会有所帮助。
对于Array
上的自定义排序函数,您可以使用任何JavaScript 函数并将其作为参数传递给Array
的sort()
方法,如下所示:
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 中排序的自定义实现。以上是关于如何在javascript中定义自定义排序功能?的主要内容,如果未能解决你的问题,请参考以下文章
如何按自定义顺序对 JavaScript 中的数组进行排序? [复制]
如何在 prestashop 中添加自定义产品“排序依据”字段?