gpt4 book ai didi

Javascript 按数字排序而不是按字母顺序排序

转载 作者:行者123 更新时间:2023-12-01 02:59:01 26 4
gpt4 key购买 nike

我有一个按字母顺序对行进行排序的函数,它工作得很好,但如果它包含数字,它会将其排序为 a1, a10, a11, ..., a2, a20, ..., a3 而不是 a1, a2 、a3等

function sort(element) {
var sortableList = element;
var listitems = $('tr', sortableList);

listitems.sort(function (a, b) {

return ($(a).find('td.myclass').text().toUpperCase() > $(b).find('td.myclass').text().toUpperCase()) ? 1 : -1;
});
sortableList.append(listitems);

}

尝试使用以下示例中的代码。尚未工作:

function sort(element) {
var sortableList = element;
var listitems = $('tr', sortableList);
var word = /[a-z]/i,
digit = /\d+/;

listitems.sort(function (a, b) {
return +$(a).find('td.myclass').text().match(digit)[0] > +$(b).find('td.myclass').text().match(digit)[0] ? 1 : -1;
}).sort(function (a, b) {
return $(a).find('td.myclass').text().match(word)[0] > $(b).find('td.myclass').text().match(word)[0] ? 1 : -1;
});
sortableList.append(listitems);

}

错误:null 不是对象(正在计算 '$(b).find('td.myclass').text().match(digit)[0]')

最佳答案

我认为这应该按预期工作,无论文本的复杂性如何......

function sort(sortableList) {
$(sortableList).append([].slice.call($('tr', sortableList)).map(function (e) {
return { element: e, values: ($(e).find('td').text().toUpperCase() || '').match(/([A-Z]+|\d+)/g) };
}).sort(function (aa, bb) {
var valuesA = aa.values ||[];
var valuesB = bb.values ||[];
var len = Math.min(valuesA.length, valuesB.length);
for (var i = 0; i < len; i++) {
var a = valuesA[i];
var b = valuesB[i];
if (a === b) {
continue;
}
var aIsNum = !isNaN(parseInt(a));
var bIsNum = !isNaN(parseInt(b));
if (aIsNum && bIsNum) {
return parseInt(a) - parseInt(b);
}
if (!(aIsNum && bIsNum)) {
return a > b ? 1 : -1;
}
if (aIsNum) {
return -1;
}
return 1;
}
return valuesA.length - valuesB.length;
}).map(function (e) {
return e.element;
}));
document.getElementById('msg').textContent = 'Sorted';
}
setTimeout(function () {
return sort(document.querySelector('table'));
}, 2000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="msg">Wait for it ....</span>
<table>
<tr>
<td>a100</td>
</tr>
<tr>
<td>a10</td>
</tr>
<tr>
<td>b100</td>
</tr>
<tr>
<td>a20</td>
</tr>
<tr>
<td>a1</td>
</tr>
<tr>
<td>a2</td>
</tr>
<tr>
<td style="background:red"></td>
</tr>
<tr>
<td>5</td>
</tr>
<tr>
<td>a</td>
</tr>
<tr>
<td>b1</td>
</tr>
</table>

关于Javascript 按数字排序而不是按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46555424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com