我尝试使用.sort()
对数组进行排序,但输出不是我预期的结果。
arr = ["0_11_6_comment", "0_3_6_comment", "0_5_4_comment"]
arr.sort();
这是我的预期输出:
["0_3_6_comment", "0_5_4_comment", "0_11_6_comment"]
但我得到了这个:
["0_11_6_comment", "0_3_6_comment", "0_5_4_comment"]
答案 0 :(得分:1)
数组正在排序,虽然它按字典顺序排序,而不是数字排序,这可能不是你想要的。如果要更改sort()
方法的排序方式,则需要提供自己对“排序”含义的定义。通过将比较函数作为参数传递来完成此操作。
请点击此处了解更多详情:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
答案 1 :(得分:0)
如果您想根据第二个整数值进行排序。用这个:
var arr = ["0_11_6_comment", "0_3_6_comment", "0_5_4_comment"];
alert(arr);
arr = arr.sort(function(a,b) {
return parseFloat(a.split("_")[1]) - parseFloat(b.split("_")[1])
});
alert(arr);
的 DEMO 强>
答案 2 :(得分:0)
试试这个:
a.sort(function (a, b) {
// '1_2_3_comment'.split('_')
// gives ["1", "2", "3", "comment"]
a = a.split('_');
b = b.split('_');
// if a[i] - b[i] = 0 then check next
return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
});
阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort。
答案 3 :(得分:0)
我建议阅读this。
ary.sort(function (a, b) {
return getSecondInteger(a) > getSecondInteger(b) ? 1 : -1;
});
function getSecondInteger (str) {
return Number(str.split('_')[1]);
}
答案 4 :(得分:0)
试试这个
var arr = ["0_11_6_comment", "0_3_6_comment", "0_5_4_comment", "1_2_3_comment"];
arr.sort(function(a, b){
a = a.match(/\d+/g);
b = b.match(/\d+/g);
return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
});
console.log(arr)
// result is ["0_3_6_comment", "0_5_4_comment", "0_11_6_comment", "1_2_3"]
尝试demo