電子書籍の厳選無料作品が豊富!

WEB制作初心者、勉強中のものです。

javascritpのsortメソッドについて質問です。
無名関数を使って偶数と奇数を並び替えるコードについてですが、
下記の場合、function(a,b)の引数a,bには、一体どこの数値が入ってるのでしょうか。
var no=[1,2,3,・・・]の中だと思うのですが、、、、a,bが一体何を指すのが
教えていただけないでしょうか?

// 『sort』の引数として、使い捨ての関数を作成して利用する
var no = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 配列作成
no.sort(function (a, b) {
// 偶数を前に、奇数を後ろにソートする
if (a % 2 == 0 && b % 2 != 0) return -1;
if (a % 2 != 0 && b % 2 == 0) return 1;
return 0;
});
alert(no); // 『2, 4, 6, 8, 10, 1, 3, 5, 7, 9』と表示

よろしくお願い致します。

A 回答 (3件)

var c = 0;


var no = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 配列作成
no.sort(function (a, b) {
alert([a,b]);
c++;
if (a % 2 == 0 && b % 2 != 0) return -1;
if (a % 2 != 0 && b % 2 == 0) return 1;
return 0;
});

alert (c);


--
そもそも、10かいのるーぷで はんべつできるものを・・・
c は、いくつ?

とちゅうに alert ([a,b]) で、なかみを かくにんしましょう!
    • good
    • 0
この回答へのお礼

ありがとうござます!なんとなくですが、動きの理解ができたように思います。
cは22ですね。ただ正直、a,bに入る値のルール、またなぜ22回ループするのか疑問が残ったりしてますが、ソートアルゴリズムとして理解するようにします。
ありがとうございます。

お礼日時:2012/09/10 16:37

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];


var b = a.concat(a.reduceRight(function(r,n,i,a){return n%2?a.splice(i,1).concat(r):r},[]));
alert (b);


var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for(var i=0,z=a.length,n;i<z;)((n=a[i])%2)?(a.push(n),a.splice(i,1),z--):i++;
alert(a);

こういうのは?
    • good
    • 0

具体的な確認方法はANo.1の通りです。



sortメソッドを自作すれば分かると思いますが
ソートをする為には比較関数(質問のプログラム例では無名関数になっています)を何度か呼び出す必要があります。
(比較回数はソートアルゴリズムなどに依存。)

a,bの値は推測されたとおり、配列内の値ですが、
どの数値かは比較関数が呼び出されるたびに変わります。
    • good
    • 0
この回答へのお礼

ありがとうございます!呼び出す回数、呼び出す数値のロジックまで、、深く捉えようとしておりましたが、ソートアルゴリズムとして概念的に捉えようと思います。割り切らないと、今の私のレベルでは前に進めないですね。。。。。本当に有り難うございます。

お礼日時:2012/09/10 16:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!