javascriptのreverse関数をかっこよくする
スポンサーリンク
javascriptのArray.prototype.reverse()
は配列の要素を逆順に並べ替えます.
暇だったので,配列の一部だけ反転するような関数を作ってみました.
ただでさえ,Array.prototype.reverse()
の需要がなさそうなのに,一部だけ反転する場面は在るのでしょうか,と思いつつ,書いてみました.
ソース
コンパクト.
/** * 配列xのi番目からj番目までを反転させる */ function reverse(x, i, j) { var a = x.slice(i, j + 1).reverse(); return x = x.slice(0, i).concat(a).concat(x.slice(j + 1)); }
解説
- 2行目
var a = x.slice(i, j + 1).reverse();
この部分では,x.slice
でi~jまでをとって,そいつらだけreverse()
使って反転させます.
- 3行目
return x = x.slice(0, i).concat(a).concat(x.slice(j + 1));
配列xのiより前の部分配列 + 先ほど反転した配列a + xのjより後ろの部分配列
をやっているだけです.
ソースその2
ちなみに,引数が足りない時など困らないように,条件分岐を追加したソースも書きました. けっこう長ったらしい…
function reverse(x, i, j) { if (i === null || typeof i === 'undefined') { return x.reverse(); } if (i >= x.length || i < 0) { return x; } if (j === null || typeof j === 'undefined') { return reverse(x, i, x.length - 1); } if (j >= x.length) { j = x.length - 1; } else if (j < i) { j = i; } var a = x.slice(i, j + 1).reverse(); return x = x.slice(0, i).concat(a).concat(x.slice(j + 1)); }