Skip to content
giginet edited this page Nov 26, 2011 · 1 revision

Kwing::Array

このライブラリは?

JSのデフォのArrayがめちゃくちゃ使いにくかったので機能拡張しまくった。

使い方

HTMLのheadにこれを書きましょう。

<script type="text/javascript" src="https://raw.github.com/giginet/kwing.coffee/master/lib/array.min.js"></script>

わずかこれだけ!

メソッド

JavaScriptの配列に以下のメソッドが追加されます。

Array#at(index)

配列のindex番目の要素を取り出します。

マイナス値で後ろから取り出すこともできます。

取り出せない場合はundefinedを返します。

[1, 3, 5].at(0) #=> 1
[1, 3, 5].at(-1) #=> 5

※以下、index値を用いるメソッドは全てマイナスのインデックス指定が可能です。

Array#map(func)

各要素とインデックスを引数にとる関数を渡すと、戻り値の新しいArrayを生成します。

[1, 3, 5].map(function(value, index){
    return value * value;
});
# => [1, 9, 25]

Array#clone(), Array#dup()

配列のコピーを生成して返します。

Array#each(func)

各要素とインデックスを引数にとる関数を渡し、要素毎に関数を実行します。mapとの違いは、戻り値は常に自分自身を返します。

Array#deleteIf(func)

要素、引数を受け取る関数を渡し、戻り値がtrueの要素を破壊的に削除します。 常に自分自身を返します。

[1, 3, 5, 7, 9, 11, 13].deleteIf(function(v, i){
    return v % 3 == 0; # 3の倍数だけ削除する
}); #=> [1, 5, 7, 11, 13]

Array#reject(func)

Array#deleteIf()と基本的に同じですが、deleteIfが常に自分を返すのに対し、rejectは、一つも要素が削除されなかったときに限りnilを返します。

Array#isEmpty()

要素数が0のとき、trueを返します

Array:isEql(other, [eql])

otherと自分自身の全ての要素が等しいとき、trueを返します。eqlは2値を引数にとる比較用関数を定義します。

eqlが指定されていないとき、各要素を===で比較します。(以後、eqlを引数にとるメソッドは同様)

Array#fill(val[, start=0][, end=@length-1])

startからendまでの要素をvalで置き換えます。

endが元の配列の長さより大きかったとき、配列を拡張します。

[0, 1, 2, 3, 4, 5, 6, 7].fill(99, 1, 3); #=> [0, 99, 99, 99, 4, 5, 6, 7]

Array#first()

配列の最初の要素を返します。配列が空の時、undefinedを返します。

Array#last()

配列の最後の要素を返します。配列が空の時、undefinedを返します。

Array#uniq([eql])

配列の重複要素を削除します。

[1, 3, 3, 1, 5, 7, 4, 3].uniq() #=> [1, 3, 5, 7, 4]

Array#index(value, [eql]), Array#rindex(value, [eql])

valueが最初に見つかったindexを返します。rindexは最後に見つかったindexを返します。

[1, 3, 3, 5].index(3); #=> 1
[1, 3, 3, 5].rindex(3); #=> 2

Array#flatten()

入れ子になった配列を平滑化します。

[[[1, 2, 3], 4, 5], 6, 7, [8, [[9]]]].flatten() #=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

Array#transpose()

行列を転置します。

[[1, 2, 3], [4, 5, 6], [7, 8, 9]].transpose() #=> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

Array#compact()

配列中のundefinedを破壊的に消去します。

Array#isInclude(val, [eql])

配列中にvalが含まれていたとき、trueを返します。eqlを定義するときは、第1引数に各要素, 第2引数にvalをとります。

Array#size()

配列のサイズを返します。(lengthと同じです)

Array#swap(a, b)

aとbのインデックスの要素を破壊的に交換します。

Array#shuffle()

配列を破壊的にシャッフルします

Array#choice()

配列の要素からランダムに一つだけ取り出します。空の配列はundefinedを返します。

Array#count(val, [eql])

配列中の要素のうち、valの数を数えます。eqlを定義するときは、第1引数に各要素、第2引数にvalをとります。

Array#replace(other)

配列を破壊的にotherで置き換えます

Array#nitems()

配列中のundefinedを抜かした要素の数を取り出します。

Array#insert(index, a, b, c, d, e...)

indexの次に第2引数以降の値を破壊的に挿入します。

[1, 2, 3, 4, 5, 6, 7].insert(1, 98, 95, 67); #=> (1, 2, 98, 95, 67, 3, 4, 5, 6, 7)

Array:clear()

配列を破壊的に空にします。

Array#max([cmp]), Array#min([cmp])

配列中から最大、最初の数を取り出します。cmpを指定しない場合は、比較には===, <, >の演算子を使いますが、cmpを指定するときは、二つの値を取り、第1引数の方が小さい場合はマイナス値を、第2引数の方が小さい場合はプラス値を、等しい場合は0を返却する関数を渡してください。

ソースコード

githubで公開中。

CoffeeScriptで開発したため、ビルド環境が必要です。

https://github.com/giginet/kwing.coffee/blob/master/lib/array.coffee

テスト

各メソッドについてテストを用意しています。

coffee nodeunit

で実行可能。