逆引きソート

久々に JavaScript でプログラミング。いろいろ思い出すために、配列を逆引き辞書順にソートする関数を作った。詩を書く時などにどうぞ。

var a = ['the', 'shells', 'she', 'sells', 'are', 'surely', 'seashells'];

var a1 = sortWords(copy(a));

var a2 = sortWords(copy(a), true);


function copy(seq) {
    return seq.slice(0);
}

function sortWords(seq, reverse_flag) {
    if (reverse_flag)
	return seq.sort(comp_reverse);
    else
	return seq.sort();
}

function comp_reverse(s1, s2) {
    var i1, i2;
    for (i1 = s1.length - 1, i2 = s2.length - 1;
	 i1 >= 0 && i2 >= 0;
	 --i1, --i2) {
	if (s1[i1] === s2[i2])
	    ; // pass
	else if (s1[i1] > s2[i2])
	    return 1;
	else
	    return -1;
    }
    return i1 - i2;
}


元の配列 a をソートする。a1 は通常の辞書順で、a2 は逆引き順。

> a
["the", "shells", "she", "sells", "are", "surely", "seashells"]
> a1
["are", "seashells", "sells", "she", "shells", "surely", "the"]
> a2
["she", "the", "are", "shells", "seashells", "sells", "surely"]