javascriptの配列操作関数いろいろ作ってみた
スポンサーリンク
javascriptで,rubyの配列操作みたいなことをやりたかったので,いろいろなメソッドを作ってみました.名前は大体rubyから取ってきてます.簡単なメソッドばかりなのでソース書くのは苦労しません.間違いありましたらご指摘いただければ幸いです.
まとめ:
method | description |
---|---|
collect(x, f) | 配列xのすべての要素eについて,f(e)を適用した結果の配列を返す |
rotate(x, n) | 配列xを左にn個ずらす。(前n個の要素を後ろに置く) |
zip(x, y) | 配列x,yの2つをまとめた配列を返す |
take(x, n) | 配列xのn番目より前の部分配列を取得する |
drop(x, n) | 配列xのn番目以降の部分配列を取得する |
uniq(x) | 配列xの重複を排除する |
isUniq(x) | 重複した要素がなければば真を返す |
index(x, e) | 配列x中の要素eと同じもののインデックスを返す |
select(x, f) | 配列x中の,条件式関数fによってf(e)が真となる要素eからなる配列を返す |
reject(x, f) | 配列x中の,条件式関数fによってf(e)が偽となる要素eからなる配列を返す |
ソース
/** * 配列xのすべての要素eについて,f(e)を適用した結果の配列を返す */ function collect(x, f) { var a = []; for (var i = 0, len = x.length; i < len; i++) { a.push(f(x[i])); } return a; } /** * 配列xを左にn個ずらす。(前n個の要素を後ろに置く) */ function rotate(x, n) { return x.slice(n - 1).concat(x.slice(0, n)); } /** * 配列x,yの2つをまとめた配列を返す */ function zip(x, y){ var l = x.length > y.length ? y.length : x.length; var a = new Array(l); for (var i = 0; i < l; i++) { a[i] = [x[i], y[i]]; } return a; }; /** * 配列xのn番目より前の部分配列を取得する */ function take(x, n){ var a = []; for (var i = 0, l = n; i < l; i++) { a.push(x[i]); } return a; }; /** * 配列xのn番目以降の部分配列を取得する */ function drop(x, n){ var a = []; for (var i = n, l = x.length; i < l; i++) { a.push(x[i]); } return a; }; /** * 配列xの重複を排除する */ function uniq(x){ for (var i = 0; i < x.length; i++) { for (var j = x.length; j > i; j--) { if (x[i] === x[j]) x.splice(j, 1); } } return x; }; /** * 重複した要素がなければば真を返す */ function isUniq(x) { for (var i = 0, l = x.length; i < l; i++) { for (var j = i + 1; j < l; j++) { if (x[i] === x[j]) return false; } } return true; } /** * 配列x中の要素eと同じもののインデックスを返す * ない場合は-1を返す */ function index(x, e){ for (var i = 0, l = x.length; i < l; i++) { if (x[i] === e) { return i; } } return -1; }; /** * 配列x中の,条件式関数fによってf(e)が真となる要素eからなる配列を返す */ function select(x, f){ var a = []; for (var i = 0, l = x.length; i < l; i++) { if (f(x[i])) { a.push(x[i]); } } return a; }; /** * 配列x中の,条件式関数fによってf(e)が偽となる要素eからなる配列を返す */ function reject(x, f){ var a = []; for (var i = 0, l = x.length; i < l; i++) { if (!f(x[i])) { a.push(x[i]); } } return a; };