无法对数组进行排序

Posted

技术标签:

【中文标题】无法对数组进行排序【英文标题】:Unable to do sort on arrays 【发布时间】:2019-04-20 01:37:50 【问题描述】:

我正在尝试按文本对 jquery 对象数组进行排序。

var $divs = $("#"+menu +"> div");
var numOrderedDivs = $divs.sort(function (a, b) 
    return $(a).text() > $(b).text();
);
$("#"+menu).html(numOrderedDivs);

但是我没有看到任何变化

【问题讨论】:

那么 text() 返回的是什么?一小部分 HTML 样本将在很大程度上帮助我们为您提供帮助 【参考方案1】:

尝试在您的排序中使用String.localeCompare

var $divs = $("#"+menu +"> div");
var numOrderedDivs = $divs.sort(function (a, b) 
    return $(a).text().localeComrate($(b).text());
);
$("#"+menu).html(numOrderedDivs);

它:

... 返回一个数字,指示引用字符串是在之前还是 在或之后的排序顺序与给定字符串相同

它还支持各种options进行比较,非常方便。

Array.sort 还可以与比较器函数一起使用,根据文档,该函数的返回值应该是一个整数:

function compare(a, b) 
  if (a is less than b by some ordering criterion) 
    return -1;
  
  if (a is greater than b by the ordering criterion) 
    return 1;
  
  // a must be equal to b
  return 0;

而不是像你这里的布尔值:return $(a).text() > $(b).text();

localeCompare 在使用时会为您执行此操作。

【讨论】:

【参考方案2】:

试试这个“.localeCompare”来排序字符串

var numOrderedDivs = $divs.sort(function (a, b) 
    return $(a).text().localeCompare($(b).text()) // for sorting in increasing order
);

【讨论】:

以上是关于无法对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 lodash 和 vueJS 对数组进行排序

ngFor - 无法对对象数组进行排序Angular 5

c_cpp 找到大量数字中最大的k数。您无法对数组进行排序。

js中sort()对数组排序的原理是啥?为何无法降序字母

如何在JavaScript中对二维数组进行排序?

Javascript 无法正确排序包含两个数组值的数组