javascriptを始めたとき「C#のLINQみたいなやつないかな。。?」といろいろ探してみた。
その当時はlinq.jsが作られていたけど、いまいち普及していなかったので遠慮していた。
最近になってlodashがメジャーになってきたのでやっとLINQの代わりになるものを安心して使えるようになった。
違っている部分はあるのでこれから勉強が必要だ。
github
https://github.com/ma-ak2011/lodash
用意したデータ
lodashTest.js
//芸能人好感度ランキングから名前を借りました。出身地や年齢は加工しています。
const people =
[
{ Name : '明石家さんま', Age : 63, Gender : 'Male', BirthPlace : '東京都'},
{ Name : '阿部寛', Age : 54, Gender : 'Male', BirthPlace : '神奈川県'},
{ Name : 'マツコ・デラックス', Age : 46, Gender : 'Male', BirthPlace : '千葉県'},
{ Name : '内村光良', Age : 54, Gender : 'Male', BirthPlace : '熊本県'},
{ Name : '新垣結衣', Age : 30, Gender : 'Female', BirthPlace : '神奈川県'},
{ Name : '浅田真央', Age : 28, Gender : 'Female', BirthPlace : '東京都'},
{ Name : '綾瀬はるか', Age : 33, Gender : 'Female', BirthPlace : '熊本県'}
];
最初の一行を取得する
lodashTest.js
const first = _.first(people);
console.log(first);
//{Name: "明石家さんま", Age: 63, Gender: "Male", BirthPlace: "東京都"}
男性を取得する
lodashTest.js
const men = _.filter(people, p => p.Gender === 'Male');
console.log(men);
//{Name: "明石家さんま", Age: 63, Gender: "Male", BirthPlace: "東京都"}
//{Name: "阿部寛", Age: 54, Gender: "Male", BirthPlace: "神奈川県"}
//{Name: "マツコ・デラックス", Age: 46, Gender: "Male", BirthPlace: "千葉県"}
//{Name: "内村光良", Age: 54, Gender: "Male", BirthPlace: "熊本県"}
女性から一人取得する
lodashTest.js
const firstFemale = _.find(people, p => p.Gender === 'Female');
console.log(firstFemale);
//{Name: "新垣結衣", Age: 30, Gender: "Female", BirthPlace: "神奈川県"}
熊本県出身の人がいるかどうか
lodashTest.js
const existPersonFromKumamoto = _.some(people, p => p.BirthPlace === '熊本県');
console.log(existPersonFromKumamoto);
//true
年齢で昇順に並べる
lodashTest.js
const orderedByAge = _.orderBy(people, ['Age'], ['asc']);
console.log(orderedByAge);
//{Name: "浅田真央", Age: 28, Gender: "Female", BirthPlace: "東京都"}
//{Name: "新垣結衣", Age: 30, Gender: "Female", BirthPlace: "神奈川県"}
//{Name: "綾瀬はるか", Age: 33, Gender: "Female", BirthPlace: "熊本県"}
//{Name: "マツコ・デラックス", Age: 46, Gender: "Male", BirthPlace: "千葉県"}
//{Name: "阿部寛", Age: 54, Gender: "Male", BirthPlace: "神奈川県"}
//{Name: "内村光良", Age: 54, Gender: "Male", BirthPlace: "熊本県"}
//{Name: "明石家さんま", Age: 63, Gender: "Male", BirthPlace: "東京都"}
年齢で降順に並べた後、名前で昇順に
lodashTest.js
const orderedByAgeThenByName = _.orderBy(people, ['Age', 'Name'], ['desc', 'asc']);
console.log(orderedByAgeThenByName);
//{Name: "明石家さんま", Age: 63, Gender: "Male", BirthPlace: "東京都"}
//{Name: "内村光良", Age: 54, Gender: "Male", BirthPlace: "熊本県"}※比較方法が違うのか、C#の文字列でのOrderByとは順番が異なる。
//{Name: "阿部寛", Age: 54, Gender: "Male", BirthPlace: "神奈川県"}
//{Name: "マツコ・デラックス", Age: 46, Gender: "Male", BirthPlace: "千葉県"}
//{Name: "綾瀬はるか", Age: 33, Gender: "Female", BirthPlace: "熊本県"}
//{Name: "新垣結衣", Age: 30, Gender: "Female", BirthPlace: "神奈川県"}
//{Name: "浅田真央", Age: 28, Gender: "Female", BirthPlace: "東京都"}
出身地ごとにグループにする
lodashTest.js
const groupByAndOrderedBy = _.groupBy(people, p => p.BirthPlace);
console.log(groupByAndOrderedBy);
//千葉県
//{Name: "マツコ・デラックス", Age: 46, Gender: "Male", BirthPlace: "千葉県"}
//東京都
//{Name: "明石家さんま", Age: 63, Gender: "Male", BirthPlace: "東京都"}
//{Name: "浅田真央", Age: 28, Gender: "Female", BirthPlace: "東京都"}
//熊本県
//{Name: "内村光良", Age: 54, Gender: "Male", BirthPlace: "熊本県"}
//{Name: "綾瀬はるか", Age: 33, Gender: "Female", BirthPlace: "熊本県"}
//神奈川県
//{Name: "阿部寛", Age: 54, Gender: "Male", BirthPlace: "神奈川県"}
//{Name: "新垣結衣", Age: 30, Gender: "Female", BirthPlace: "神奈川県"}
年齢の最小値、最大値を取得したい
lodashTest.js
const minBy = _.minBy(people, p => p.Age);
console.log(minBy);
console.log(minBy.Age);
//最小値:28
const maxBy = _.maxBy(people, p => p.Age);
console.log(maxBy);
console.log(maxBy.Age);
//最小値:63
lodashみたいなことをC#でしたい人はこちら LINQ
これは参考になった http://dblog.athome.co.jp/entry/2016/10/13/120000#f-24bc240f