Underscore.jsでは、Array, Object関連の関数にも凄く便利なものがあります。
first
_.first(array, [n])
配列の最初の値を返します。
(function() { var list = [1, 2, 5, 6, 2]; var x = _.first(list); console.log(x); // => 1 })();
initial
_.initial(array, [n])
配列の最後の要素以外を返します。
(function() { var list = [1, 2, 5, 6, 2]; var x = _.initial(list); console.log(x); // => [1,2,5,6] })();
last
_.last(array)
配列の最後の要素以外を返します。
(function() { var list = [1, 2, 5, 6, 2]; var x = _.last(list); console.log(x); // => 2 })();
rest
_.rest(array, [n])
[n]に指定があると、配列の後ろから[n]個の要素を返します。無い場合は先頭以外の残りの要素を返します。
(function() { var list = [1, 2, 5, 6, 2]; var x = _.rest(list, 2); console.log(x); // => [5, 6, 2] })();
compact
_.compact(array, [n])
配列中のfalse, null, 0, “”, undefinedを取り除きます。
(function() { var list = [1, null, 5, false, "", "false"]; var x = _.compact(list); console.log(x); // => [1, 5, "false"] })();
flatten
_.flatten(array, [shallow])
多次元配列を一次元化します。
(function() { var a = [1, [2], [3, [[{"name": "hoge"},{"name": "fuga"}]]]]; var x = _.flatten(a); console.log(x); // => [1, 2, 3, object, object] })();
without
_.without(array, [*values])
*valuesを配列中から取り除きます。
(function() { var a = ["hoge", 2, "fuga", 0, 3, 1, 3]; var x = _.without(a, 0, "fuga", "3"); console.log(x); // => ["hoge", 2, 3, 1, 3] })();
union
_.union(*arrays)
arraysの和集合を算出します。重複を除去するイメージ。
(function() { var a = [1, 2, "web"]; var b = [101, 2, 1, 10]; var c = ["hoge", 1, "hoge", "hoge"] var x = _.union(a, b, c); console.log(x); // => [1, 2, "web", 101, 10, "hoge"] })();
intersection
_.intersection(*arrays)
arraysの積集合を返します。重複しているものを取り出すイメージですね。
(function() { var a = [1, 2, "web"]; var b = [101, 2, 1, 10]; var c = ["hoge", 1, 2, "hoge", "hoge"] var x = _.intersection(a, b, c); console.log(x); // => [1, 2] })();
difference
_.difference(array, *others)
array内の要素から、*othersに存在しないものを返します
(function() { var a = [10, 3, 1, 5, "hoge", "fuga"]; var b = [2, 1, 10]; var c = ["hoge", 1, 3]; var x = _.difference(a, b, c); console.log(x); // => [5, "fuga"] })();
uniq
_.uniq(array, [isSorted], [iterator])
array内の重複を除去します。
(function() { var a = [10, 3, 1, 5, "fuga", "hoge", "fuga", 10, 3]; var x = _.uniq(a); console.log(x); // => [10, 3, 1, 5, "fuga", "hoge"] })();
zip
_.zip(*arrays)
arraysを結合します。同じキーで連想配列の一つの値となります。
(function() { var a = ["surf", "huntington", 1]; var b = ["skate", "santa monica", 10]; var c = ["snow", "bear", 3]; var x = _.zip(a, b, c); console.log(x); // => [Array["surf", "skate", "snow"], Array["huntington","santa monica","bear"], Array[1,10,3]] })();
object
_.object(list, [values])
listをオブジェクトに変換します。キーが重複する場合は、最後の値が優先されます。
(function() { var a = ["key1", "bad"], b = ["key2", "dont know"], c = ["key1", "good"]; var x = _.object([a, b, c]); console.log(x); // => [Object {key1: "good", key2: "dont know"} })();
indexOf
_.indexOf(array, value, [isSorted])
array内のvalueが無い場合、falseを返します。それ以外はインデックスを返します。
(function() { var a = ["surf", "snow", "skate"]; var x = _.indexOf(a,"skate"); console.log(x); // => 2 })();
lastIndexOf
_.lastIndexOf(array, value, [fromIndex])
array内のvalueが最後に現れるindexか、無い場合は-1を返します。
(function() { var a = ["surf", "snow", "skate", "surf"]; var x = _.lastIndexOf(a,"surf"); console.log(x); // => 3 })();
sortedIndex
_.sortedIndex(list, value, [iterator], [context])
二分探索法を使用して、valueがlist内にあるべきインデックスを返します。
(function() { var stooges = [{name: 'moe', age: 40}, {name: 'curly', age: 60}]; x = _.sortedIndex(stooges, {name: 'larry', age: 50}, 'age'); console.log(x); // => 1 })();
range
_.range([start], stop, [step])
startからstopまで、stepずつ増分されるリストを返します。start, stepは省略可能で、デフォルトではstart = 0, step = 1となっています。ループの際に重宝しそうです。
(function() { x = _.range(10); console.log(x); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] x = _.range(1, 11); console.log(x); // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] x = _.range(0, 30, 5); console.log(x); // => [0, 5, 10, 15, 20, 25] x = _.range(0, -10, -1); console.log(x); // => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] })();