我有这个数组:
var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"];
我希望使用值进行排序, tild ,然后使用之后的 tild 。
我在互联网上找到的解决方案很少但不起作用。
var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"];
temp_arr.sort(function(a,b){
return Number(a.split('~')[0]) - Number(b.split('~')[0]);
});
temp_arr.sort(function(a,b){
var a_ = Number(a.split('~')[1]);
var b_ = Number(b.split('~')[1]);
var a2 = Number(a.split('~')[0]);
var b2 = Number(b.split('~')[0]);
if(a2 != b2)
{
return 0;
}
else if(a_ != b_)
{
return a_ > b_;
}
});
console.log(temp_arr);
答案 0 :(得分:2)
您可以使用此代码:
var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"];
for(var i = 0; i < temp_arr.length; i++)
{
for(var it = 0; it < temp_arr.length-1; it++)
{
var it1 = temp_arr[it];
var it2 = temp_arr[it+1];
var right1 = Number(it1.split('~')[1]);
var right2 = Number(it2.split('~')[1]);
var left1 = Number(it1.split('~')[0]);
var left2 = Number(it2.split('~')[0]);
if(left1 > left2 || (right1 > right2 && left1 == left2))
{
var temp = temp_arr[it];
temp_arr[it] = temp_arr[it+1];
temp_arr[it+1] = temp;
}
}
}
console.log(temp_arr);
它使用了冒泡排序的修改版本。
<强> Fiddle 强>
编辑:缩短一点
答案 1 :(得分:2)
如果您想要使用您的想法更短的代码,您可以使用
var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"];
temp_arr.sort(function(a,b){
var t = Number(a.split('~')[0]) - Number(b.split('~')[0]);
if (t == 0)
return Number(a.split('~')[1]) - Number(b.split('~')[1]);
else
return t;
});
console.log(temp_arr);
希望它有所帮助 丹