javascript array.sort不使用整数

javascript array.sort不使用整数,javascript,jquery,Javascript,Jquery,我在javascript数组排序和整数方面有问题。我定义了以下功能: function sortA(a,b){ return a - b; } function sortD(a,b){ return b - a; } 然后在jquery$中,我在数组中放入了一些内容: $('.'+sort_column).each(function(index, value) { var current_num = $.trim($(this).text()) current_

我在javascript数组排序和整数方面有问题。我定义了以下功能:

function sortA(a,b){ 
  return a - b;
}
function sortD(a,b){ 
  return b - a;
}
然后在jquery$中,我在数组中放入了一些内容:

$('.'+sort_column).each(function(index, value) {

    var current_num = $.trim($(this).text())

    current_num = parseInt(current_num, 10); //convert to integer for numeric sorting.

    valuesArr.push(current_num);  

    console.log(typeof index); //just checking...this shows number in the console
});

var sort_asc = valuesArr.sort(sortA);
var sort_desc = valuesArr.sort(sortD);
console.log(sort_asc);
console.log(sort_desc);
但在控制台中,我以相同的顺序获取数组

//console
[1214500, 1214499, 1214497, 1214481, 1214432, 1214421, 1214419, 1214418, 1214369, 1214045, 1205691]
[1214500, 1214499, 1214497, 1214481, 1214432, 1214421, 1214419, 1214418, 1214369, 1214045, 1205691]
奇怪的是,如果我在末尾附加一个字符串,排序就会起作用

console.log( valuesArr.sort(sortD)  + "asdf");
console.log( valuesArr.sort(sortA)  + "asdf");

//console
[1214500,1214499,1214497,1214481,1214432,1214421,1214419,1214418,1214369,1214045,1205691asdf] 
[1205691,1214045,1214369,1214418,1214419,1214421,1214432,1214481,1214497,1214499,1214500asdf]

我不知道我为什么要这么做,但你看。这是我第一次使用这种方法,所以我可能错过了一些非常基本的东西。非常感谢您的帮助

将数组排序到位。两个变量
sort\u asc
sort\u desc
引用相同的数组,因此输出是相同的。

您对相同数组的实例进行排序,这就是顺序相同的原因。基本上更改数组本身的内容

因此,它们都将按desc顺序排列(这是您正在进行的最后一次排序)。如果要保持原始实例的完整性,应创建新阵列:

var sort_asc = valuesArr.slice(0).sort(sortA);
var sort_desc = valuesArr.slice(0).sort(sortD);

console.log(valuesArr);
console.log(sort_asc);
console.log(sort_desc);

另请参见。

您可以简单地更改
sortA()
sortD()
如下所示:

function sortA(arr) {
    return arr.sort(function(a, b) {
       return a - b;
    });
}

function sortD(arr) {
    return arr.sort(function(a, b) {
       return b - a;
    });
}
var myarr = [1214500, 1214499, 1214497, 1214481, 1214432, 1214421, 
             1214419, 1214418, 1214369, 1214045, 1205691];

sortA(myarr);

sortD(myArr);
然后使用如下方法:

function sortA(arr) {
    return arr.sort(function(a, b) {
       return a - b;
    });
}

function sortD(arr) {
    return arr.sort(function(a, b) {
       return b - a;
    });
}
var myarr = [1214500, 1214499, 1214497, 1214481, 1214432, 1214421, 
             1214419, 1214418, 1214369, 1214045, 1205691];

sortA(myarr);

sortD(myArr);

chrome控制台存在一个问题,即它在记录时不会记录对象的状态,当您执行
+“asd”
时,它会记录字符串,而不是对象,因此它会“正确地”记录。@Esailija:这是正确的,但chrome的
控制台.log
会将数组转换为字符串。@Esailija:好的。我真的不理解“在记录时不记录对象的状态”。它记录的是哪个状态?^^并通过为新数组创建新变量
var sort\u asc=valuesArr.sort(sortA);var sort_desc=估值器排序(sortD)如果在创建它们的那一刻就填充了排序后的值,它怎么能显示它们呢?我也不明白为什么把对象做成一个字符串会得到更准确的图像。对不起,这是很多问题。@thomas这与你的问题没有直接关系,只是第一件突然出现在我脑海中的事情,chrome似乎已经解决了阵列的问题。真正的问题是,新数组不是使用
.sort
创建的,因此您一直在对同一数组进行排序,因此只有最后一个结果对您可见。见菲利克斯·克林answer@thomas:Esailija指的是,这一点很重要,但不适用于您的情况。优势是什么?这与问题有什么关系?@FelixKling我认为OP有排序数组的问题,上面的解决方案效果很好。如果我误解了OP的观点,那么请评论我OP对排序操作的输出感到困惑,因为他不知道数组已被排序到位。但是他使用
.sort
的方式是正确的。你能进一步解释一下为什么你使用slice而不是
var sort\u asc=valuesArr;sort_desc=估价师?Thanks@thomas:我想你指的是Zer0的答案;)不能同时以两种不同的方式对同一数组进行排序
.slice
将创建数组的副本,然后对其进行排序。