【JS】【保存版】underscore.js の使用方法 まとめ Collection Functions
2013.11.19
この記事は最終更新日から1年以上が経過しています。
underscore.js
ども。
世間では、なんちゃらjsが多く溢れていて、何がなんやらで大変ですね。
でも、そんななんちゃらjsが皆さん好きなのかも知れませんね。
と、そんな感じで、今回は登場してちょっと経ちますが、配列操作に便利な underscore.js について書いて見たいと思います。
正式ドキュメント
underscore.js
このドキュメントに沿って、
メソッドの用途を一言。
正式ドキュメント。
使用例。
を書いてみたいと思います!
Collection Functions (Arrays or Objects)
each
_.each(list, iterator, [context])
配列の数の処理を実行。
_.each([1, 2, 3], alert);
=> alerts each number in turn...
_.each({one: 1, two: 2, three: 3}, alert);
=> alerts each number value in turn...
example
(function() {
_.each([3, 4, 5, 6], function(num) {
console.log(num * 2);
});
})();
map
_.map(list, iterator, [context])
配列の数処理し、配列に格納
_.map([1, 2, 3], function(num){ return num * 3; });
=> [3, 6, 9]
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
example
(function() {
var x = _.map([3, 4, 5, 6], function(num) {
return num * 2;
});
console.log(x);
})();
reduce
_.reduce(list, iterator, memo, [context])
配列を1つの値に集約する。memoが初期値。
var sum = _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);
=> 6
example
(function() {
var x = _.reduce([3, 4, 5, 6], function(memo, num) {
return memo + num;
}, 0);
console.log(x);
})();
上記の場合、0が初期値。
reduceRight
_.reduceRight(list, iterator, memo, [context])
reduceを右から処理
var list = [[0, 1], [2, 3], [4, 5]];
var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
=> [4, 5, 2, 3, 0, 1]
example
(function() {
var list = [[2, 3], [4, 5], [6, 7]];
var x = _.reduceRight(list, function(a, b) {
return a.concat(b);
}, []);
console.log(x);
})();
find
_.find(list, iterator, [context])
条件判定で検索
var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> 2
example
(function() {
var a = [4, 6, 10, 65, 32];
var x = _.find(a, function(num) {
return num > 7;
});
console.log(x);
})();
filter
_.filter(list, iterator, [context])
条件を満たす値を返す
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]
example
(function() {
var a = [4, 6, 10, 65, 32];
var x = _.filter(a, function(num) {
return num > 7;
});
console.log(x);
})();
where
_.where(list, properties)
該当するオブジェクトを全て返す
_.where(listOfPlays, {author: "Shakespeare", year: 1611});
=> [{title: "Cymbeline", author: "Shakespeare", year: 1611},
{title: "The Tempest", author: "Shakespeare", year: 1611}]
example
(function() {
var listOfPlays = [
{
title: "Cymbeline",
author: "Shakespeare",
year: 1611
},
{
title: "The Tempest",
author: "Shakespeare",
year: 1611
},
{
title: "web帳",
author: "me",
year: 1978
}
];
var x = _.where(listOfPlays, {author: "me", year: 1978});
console.log(x);
})();
findWhere
_.findWhere(list, properties)
該当するオブジェクトを探す
_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
=> {year: 1918, newsroom: "The New York Times",
reason: "For its public service in publishing in full so many official reports,
documents and speeches by European statesmen relating to the progress and
conduct of the war."}
example
(function() {
var listOfPlays = [
{
title: "Cymbeline",
author: "Shakespeare",
year: 1611
},
{
title: "The Tempest",
author: "Shakespeare",
year: 1611
},
{
title: "web帳",
author: "me",
year: 1978
}
];
var x = _.findWhere(listOfPlays, {author: "Shakespeare"});
console.log(x);
})();
reject
_.reject(list, iterator, [context])
リストの要素の中から、真値テストを通過しなかったものを返す。
var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [1, 3, 5]
example
(function() {
var a = [5, 8, 12, 13, 15, 26]
var x = _.reject(a, function(num) {
return num % 2 == 0;
});
console.log(x);
})();
every
_.every(list, [iterator], [context]) Alias: all
list の値すべてが iterator 真値テストをパスしたら true を返します。
_.every([true, 1, null, 'yes'], _.identity); => false
example
(function() {
var x = _.every(['hoge', 'no', 'null', 'yes'], _.identity);
console.log(x);
})();
some
_.some(list, [iterator], [context])
list の値のどれかが iterator 真値テストをパスしたら true を返します。/
_.some([null, 0, 'yes', false]); => true
example
(function() {
var x = _.some([null, false, null, 0]);
console.log(x);
})();
contains
_.contains(list, value)
list の値にvalueがみつかれば true を返します。
_.contains([1, 2, 3], 3); => true
example
(function() {
var a = [5, 8, 12, 13, 15, 26]
var x = _.contains(a, 26);
console.log(x);
})();
invoke
_.invoke(list, methodName, [*arguments])
listの中のそれぞれの値に対して methodName で指名されたメソッドをコールします。
_.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); => [[1, 5, 7], [1, 2, 3]]
example
(function() {
var a = [5, 8, 12, 13, 15, 26]
var x = _.invoke([[5, 2, 7, "3943"], ['テキスト', 2, 1]], 'sort');
console.log(x);
})();
pluck
_.pluck(list, propertyName)
mapの便利版。プロパティ値のリストの抽出。
var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
_.pluck(stooges, 'name'); => ["moe", "larry", "curly"]
example
(function() {
var person = [
{ name: 'わたし', age: 20 },
{ name: 'あなた', age: 22 },
{ name: 'そなた', age: 40 }
];
var x = _.pluck(person, 'name');
console.log(x);
})();
max
_.max(list, [iterator], [context])
list の中の最大値を返します。
var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
_.max(stooges, function(stooge){ return stooge.age; });
=> {name: 'curly', age: 60};
example
(function() {
var person = [
{ name: 'わたし', age: 20 },
{ name: 'あなた', age: 22 },
{ name: 'そなた', age: 40 }
];
var x = _.max(person, function(stooge) { return stooge.age; });
console.log(x);
})();
min
_.min(list, [iterator], [context])
list の中の最小値を返します。
var numbers = [10, 5, 100, 2, 1000]; _.min(numbers); => 2
example
(function() {
var person = [
{ name: 'わたし', age: 20 },
{ name: 'あなた', age: 22 },
{ name: 'そなた', age: 40 }
];
var x = _.min(person, function(stooge) { return stooge.age; });
console.log(x);
})();
sortBy
_.sortBy(list, iterator, [context])
それぞれの値を iterator に通した結果でランク付けした順に並び替えられたlist のコピーを返す。
_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
=> [5, 4, 6, 3, 1, 2]
example
(function() {
var a = [1, 2, 3, 4, 5, 6];
var x = _.sortBy(a, function(num) { return num * -1; });
console.log(x);
})();
groupBy
_.groupBy(list, iterator, [context])
それぞれの値を iteratorに通した結果グループ化した組に分けます。 iterator が関数ではなく文字列なら、値のそれぞれに対する iterator と名付けられたプロパティでグループ化します。
_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); });
=> {1: [1.3], 2: [2.1, 2.4]}
_.groupBy(['one', 'two', 'three'], 'length');
=> {3: ["one", "two"], 5: ["three"]}
example
(function() {
var a = [3, 4, 6, 8, 13, 15];
var x = _.groupBy(a, function(num){
return num % 3;
});
console.log(x);
})();
indexBy
_.indexBy(list, iterator, [context])
iteratorのキーの値を元に結果を返します。
var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
_.indexBy(stooges, 'age');
=> {
"40": {name: 'moe', age: 40},
"50": {name: 'larry', age: 50},
"60": {name: 'curly', age: 60}
}
example
(function() {
var person = [
{name: 'moe', age: 40},
{name: 'larry', age: 40},
{name: 'curly', age: 40}
];
var x = _.indexBy(person, 'age');
console.log(x);
})();
countBy
_.countBy(list, iterator, [context])
それぞれの値を iteratorに通した結果グループ化した組に分け、その結果の数を返す。
_.countBy([1, 2, 3, 4, 5], function(num) {
return num % 2 == 0 ? 'even': 'odd';
});
=> {odd: 3, even: 2}
example
(function() {
var a = [2, 3, 6, 8, 18, 21];
var x = _.countBy(a, function(num) {
return num % 3 == 0 ? '3の倍数' : '3の倍数以外';
});
console.log(x);
})();
shuffle
_.shuffle(list)
list の値をシャッフルされたコピーを返します。
_.shuffle([1, 2, 3, 4, 5, 6]); => [4, 1, 6, 3, 5, 2]
example
(function() {
var a = ["web帳", 3, 6, 8, "牛丼", 21];
var x = _.shuffle(a);
console.log(x);
})();
sample
_.sample(list, [n])
list の値をランダムに標本として取得します。
_.sample([1, 2, 3, 4, 5, 6]); => 4 _.sample([1, 2, 3, 4, 5, 6], 3); => [1, 6, 2]
example
(function() {
var a = ["web帳", 3, 6, 8, "牛丼", 21];
var x = _.sample(a, 3);
console.log(x);
})();
toArray
_.toArray(list)
listをArrayに変換する。
(function(){ return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
=> [2, 3, 4]
example
(function() {
var x = (function() {
return _.toArray(arguments);
})(1,3,4,"web帳");
console.log(x);
})();
size
_.size(list)
listに含まれている要素の数を返す。
_.size({one: 1, two: 2, three: 3});
=> 3
example
(function() {
var a = {
one: 1,
two: 2,
three: 3,
webcyou: "https://www.webcyou.com/"
}
var x = _.size(a);
console.log(x);
})();
と、凄く長くなることが判明しましたので、Array Functions は次回で、分けていきたいと思います。



























