2

私はこれにかなりの時間を費やしましたが、ここでバグを発見できませんでした。

基本的にvar test_arr = [['79',0],['8',1],['30', 2],['580',3],['59',4]]、関数から生成するタイプの多変量配列があります。私の並べ替え fxnvar sort_arrays = function(a,b) {return a[0]-b[0]};が配列値を適切に並べ替えることができないという点で、通常の配列のようには動作しません。

実際の配列があること、および別の並べ替えメソッドを呼び出していないことを確認しようとしました。

したがって:

console.log(arr_test.sort(sort_arrays)); 

与えます:[[8,1],[30,2],[59,4],[79,0],[580,3]]

ただし、これを私のfxnで呼び出すと、

console.log(input_kde.sort(sort_arrays));

、与えます:[...,[580, 0.002],[59,0.001]]

印刷可能な出力を生成しよう.toStringとして、結果を呼び出したところ、正しくソートされた出力が得られましたが、これは私の混乱を固めるだけでした。

私はparseFloat(a[0])無駄に明示的な型キャストを試みました。

また、これが実際に配列であることを確認しようとしました。

console.log(typeof(input_kde)); //#> object
console.log(input_kde.constructor); //#> function Array() { [native code] }
console.log(input_kde instanceof Array); //#> true

また、input_kde[0] は配列であり、input_kde[0][0] は数値です

console.log(input_kde[0] instanceof Array); //#> true
console.log(typeof(input_kde[0][0])); //#> number

私は何を逃したのですか?

編集2

var input_kde = [[22,0.0017095221275204712],[24,0.001712291003699343],[28,0.001716821328044571],[307,0.0009792081392809542],[33,0.0017205981968323918],[34,0.0017211029300063302],[341,0.0010085669284820244],[35,0.0017215244128879188],[387,0.0010558490092862406],[4,0.0016696065108796395],[40,0.0017223891946762664],[448,0.0010667514507313397],[491,0.0010124434821844265],[519,0.0009480280002363708],[580,0.0007465298453339767],[59,0.0017073128314605394]]
4

3 に答える 3

0

正常に動作しているようです http://jsfiddle.net/w8T32/

var test_arr = [['79',0],['8',1],['30', 2],['580',3],['59',4]];
test_arr.sort(function(a,b){
    return a[0] -b[0];
});
console.log(test_arr)​

そして、出力は次のようなものです

[['8',1], ['30',2], ['59', 4], ['79',0], ['580', 3]]

考慮すべきことの1つは、sortには文書化された戻り値がない(その場で配列を変更する)が、それを使用しているように見えることです。戻り値に依存しないようにコードを変更し、それが違いを生むかどうかを確認します

于 2012-07-23T20:39:09.593 に答える
0

私はここで暗闇の中で撮影しているだけかもしれませんが、そこに混合型 (string と int) がありますか?

于 2012-07-23T20:32:28.880 に答える
0
var input_kde = [[22,0.0017095221275204712],[24,0.001712291003699343],[28,0.001716821328044571],[307,0.0009792081392809542],[33,0.0017205981968323918],[34,0.0017211029300063302],[341,0.0010085669284820244],[35,0.0017215244128879188 ],[387,0.0010558490092862406],[4,0.0016696065108796395],[40,0.0017223891946762664],[448,0.0010667514507313397],[491,0.0010124434821844265],[519,0.0009480280002363708],[580,0.0007465298453339767],[59,0.0017073128314605394]]



    //テスト走行
    var sorted=input_kde.sort(function(a,b){return a[0]-b[0]});
    アラート(ソート済み);

間違いが見つかりません!!!!

sort_arrays実際、2回目の実行でコードが正しい値を返さないのは、前の変数ですでに変数を設定しているためです!! したがって、失敗しました!

于 2012-07-23T21:13:06.223 に答える