Discuss / JavaScript / 这个结果也是看不懂

这个结果也是看不懂

Topic source

var original_array1 = [1,5,3,11,12,6,20,2,3,15,19,23,7,'q','qa','qc']; original_array1.sort(function(a,b){ if (a < b) { return 1; } if (a > b) { return -1; } return 0; });//结果是[23, "qc", 19, 15, 12, 11, 7, 6, 20, 3, 3, 2, 1, "qa", "q", 5]

original_array1.sort(function(a,b){
    if (a < b) {
        return -1;
    }
    if (a > b) {
        return 1;
    }
    return 0;
});//结果是[1, 2, 3, 3, 5, 6, 7, 11, 12, 15, 19, 20, 23, "q", "qa", "qc"]

// 简直看不懂 求解答

勇猛熊猫

#2 Created at ... [Delete] [Delete and Lock User]

简单说: 6 > 'q' return false; 'q' > 6 return false;

houbo111

#3 Created at ... [Delete] [Delete and Lock User]

http://blog.csdn.net/xiaaiwu/article/details/50507120 这里讲了JavaScript中数字,数字字符串,非数字字符串之间比较大小。 但是我试了你的代码,还是凌乱了,每排一次序,得到的结果都不同=.=。 JavaScript中sort是用优化过的快速排序实现的,它是不稳定排序算法,但执行代码得到的结果还是令人匪夷所思

arr.sort(function(x,y){
if(x<y)return -1;
if(x>y)return 1; 
return 0;
});
[6, "q", 20, 19, 2, 3, 3, 5, 1, 7, 11, 12, 15, "qa", "qc", 23]

我不知道6为什么会跑到最前面=.=,我感觉至少数字应该是按照从小到大排序的。

js会自动转换类型进行对比。会不会是斗转换成了十进制进行对比之后再返回原来的值?


  • 1

Reply