我正在使用 localCompare 来比较一些字符串,这些字符串是数字。我希望订单是数字。我该怎么做?
requestAmountEl.find('optgroup').each(function(){
var $this = jQuery(this);
options = $this.children('option');
options.detach().sort(function(a,b) {
return b.value.localeCompare(a.value);
}).appendTo($this);
});
<optgroup label="6 Months">
<option value="2000">$2,000</option>
<option value="11000">$11,000</option>
<option value="10000">$10,000</option>
<option value="1000">$1,000</option>
</optgroup>
现在它将排序 2000、10000、11000、1000。
String.localeCompare 有你需要的。 传入数字选项,它会将您的字符串视为数字:
['2000', '11000', '10000', '1000'].sort(
(a, b) => a.localeCompare(b, undefined, {'numeric': true})
);
...结果:
["1000", "2000", "10000", "11000"]
requestAmountEl.find('optgroup').each(function(){
var $this = jQuery(this);
options = $this.children('option');
options.detach().sort(function(a,b) {
if (parseInt(b.value) > parseInt(a.value)) return 1;
else if (parseInt(b.value) < parseInt(a.value)) return -1;
else return 0;
}).appendTo($this);
});
对于我的代码,当选择动态排序字段/属性(名称为字符串或 id 为整数或值任意等...)时,可以使用此通用解决方案
sortedCategories() {
return [...this.categories].sort((cat1, cat2) => {
return cat1[this.selectedSort]?.toString().localeCompare(cat2[this.selectedSort].toString());
});
},
所以尝试一下你的代码
requestAmountEl.find('optgroup').each(function(){
var $this = jQuery(this);
options = $this.children('option');
options.detach().sort(function(a, b) {
return b.value?.toString().localeCompare(a.value.toString());
}).appendTo($this);
});