Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

lodash

More than 1 year has passed since last update.

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

manipulative
自分用のメモ書きです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away