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]
})();