LoginSignup
7
7

More than 5 years have passed since last update.

lodash

Last updated at Posted at 2018-05-31

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

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7