javascript array.sort不使用整数

时间:2012-06-03 17:56:35

标签: javascript jquery

我遇到了javascript数组排序和整数的问题。我定义了这些函数:

function sortA(a,b){ 
  return a - b;
}
function sortD(a,b){ 
  return b - a;
}

然后在jquery $ .each中,我在数组中添加了一些内容:

$('.'+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]

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

3 个答案:

答案 0 :(得分:4)

您正在对同一个数组的实例进行排序,这就是订单相同的原因。基本上sort会更改数组本身的内容。

所以它们都将按顺序排列(这是你正在进行的最后一次排序)。如果要保持原始实例不变,则应创建新数组:

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);

另见slice

答案 1 :(得分:2)

.sort() [MDN]对数组就地进行排序。变量sort_ascsort_desc都引用相同的数组,因此输出相同。

答案 2 :(得分:1)

您只需更改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);

<强> DEMO