見出し画像

for文でぐるぐるしてオブジェクトの内容を表示したいとき、mapとlambdaでもっとかんたんに表示させる。あとforEachも。

はじめに

Googleカレンダーの名前一覧をちらっと見たいときに、for文でぐるぐる書くのが大変なので、短くできる方法を探してみた。

mapなるもので処理を省略してみる

"for of"以外に書き方ないかな?とおもって、探していみると、mapで近いことができることを発見!
やってみた。

for ofとmap

これが、

function getAllCalendarName() {
  const cals = CalendarApp.getAllCalendars();
  for (let cal of cals) {
    Logger.log(cal.getName());
  }
}

こう

function map() {
  const cals = CalendarApp.getAllCalendars();
  cals.map(function (cal) {
    Logger.log(cal.getName());
  });
}

function(){}な部分をlambdaで書き直してみる

functionな部分は条件によって省略できるみたい。

  cals.map(function (cal) {
    Logger.log(cal.getName());
  });

functionはアロー演算子"=>"で書き換えられる。

  cals.map((cal) => {
    Logger.log(cal.getName());
  });

引数の"(cal)"は、引数の数が1つのときに限り()が省略できる。

  cals.map(cal => {
    Logger.log(cal.getName());
  });

一行で収まる内容なら、{}も省略できる。

cals.map(cal => Logger.log(cal.getName()));

めちゃかんたんになった!うれしい。

forEachでもできる

今回はmapでやったけど、forEachでも同じように省略できそう。

cals.forEach(cal => Logger.log(cal.getName()));

mapもforEachも関数を引数に渡してあげているから同じことができるのかな。

一応forEachだと、結果を戻り値で受け取れないみたいだから、それによって使い分けるのもありかも。

function lambdaAndForeach() {
  const cals = CalendarApp.getAllCalendars();
  let returnValues = cals.map(cal => cal.getName());

  // [XXX@gmail.com, 日本の祝日, 誕生日]
  Logger.log(returnValues);

  returnValues = cals.forEach(cal => cal.getName());

  // null
  Logger.log(returnValues);
}

まとめ

ちょっと調べてコメントアウトしておきたいときとか1行だと便利だなー。
単純な処理なら読みやすいし使っていこうとおもった。

参考

【JavaScript】Mapオブジェクトとmapメソッドの使い方まとめ - TRAINOCAMP

いいなと思ったら応援しよう!