2

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]

なぜ私がそれを試したのかわかりませんが、そうです。この方法を使用するのはこれが初めてなので、かなり基本的なことを見逃している可能性があります。助けてくれてありがとう!

4

3 に答える 3

4

同じ配列のインスタンスを並べ替えているため、順序が同じです。基本的に、並べ替えは配列自体の内容を変更します。

したがって、両方とも降順になります (これは、実行している最後の並べ替えです)。元のインスタンスをそのまま維持したい場合は、新しい配列を作成する必要があります。

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

スライスも参照してください。

于 2012-06-03T18:13:55.150 に答える
2

.sort() [MDN]配列をその場でます。変数sort_ascsort_descが同じ配列を参照するため、出力は同じです。

于 2012-06-03T18:00:23.977 に答える
2

次のように単純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);

デモ

于 2012-06-03T20:02:33.180 に答える