tanakaQiita
@tanakaQiita

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【GAS/JavaScript】配列にまつわることになるかと思うのですが、プログラムの意味が分からず困っているので教えてください。

Q&A

Closed

解決したいこと

プログラムの意味が分からずに困っているので、分かる方教えてください。
以下のプログラムは、プログラムの全体から抜粋してきているため、一部になります。

また、実施していることは以下画像内のことになるので、
伝わりやすいようにするため、画像も添付いたします。

キャプチャ.PNG

プログラム内での分からない部分

以下のプログラム内に記載の
acc[cur[3]] = cur[0]; return acc 
の数字が、なぜこのようになっているのか、意味が理解できないので教えていただきたいです。
以下のプログラム内に記載のように、
// I列(項目1)をキー、F列(連携日)を値とする連想配列を作成。
をするために、行っているかと思うのですが、
なぜこのような数字になるのかが分かりません。
基礎的なことかもしれず、知識不足ですみませんが、分かる方教えてください。
// F列(連携日)のデータを取得
const renkeibiList = sheet.getRange(2, 6, lastRow - 1, 4).getValues();

// I列(項目1)をキー、F列(連携日)を値とする連想配列を作成。
const renkeibiTable = renkeibiList.reduce((acc, cur) => { acc[cur[3]] = cur[0]; return acc }, {})
0

1Answer

わかりにくいですが……。

const renkeibiList = sheet.getRange(2, 6, lastRow - 1, 4).getValues();
/* ここで
renkeibiList == [
  ['2021/01/01', '←項目Aの連携日', '', 'A'],
  ['2021/01/01', '←項目Bの連携日', '', 'A'],
  ['2021/01/01', '←項目Cの連携日', '', 'B'],
  ...
];
になっているはず */

const renkeibiTable = renkeibiList.reduce((acc, cur) => {
  acc[cur[3]] = cur[0];
  return acc;
}, {});

/* reduce 1回目
  acc == {};
  cur == ['2021/01/01', '←項目Aの連携日', '', 'A'];
  cur[0] == '2021/01/01';
  cur[3] == 'A';
  // すなわち
  acc[cur[3]] = cur[0]; // --> acc['A'] = '2021/01/01';
  return acc; // --> return { 'A': '2021/01/01' };
*/
/* reduce 2回目
  acc == { 'A': '2021/01/01' };
  cur == ['2021/01/01', '←項目Bの連携日', '', 'A'];
  cur[0] == '2021/01/01';
  cur[3] == 'A';
  // すなわち
  acc[cur[3]] = cur[0]; // --> acc['A'] = '2021/01/01'; (上書き)
  return acc; // --> return { 'A': '2021/01/01' };
*/
/* reduce 3回目
  acc == { 'A': '2021/01/01' };
  cur == ['2021/01/01', '←項目Cの連携日', '', 'B'];
  cur[0] == '2021/01/01';
  cur[3] == 'B';
  // すなわち
  acc[cur[3]] = cur[0]; // --> acc['B'] = '2021/01/01';
  return acc; // --> return { 'A': '2021/01/01', 'B': '2021/01/01' };
*/

reduce()は少し難しいので、理解のしやすさでは通常のforループで実装したほうがいいかと思います。

0Like

Comments

  1. @tanakaQiita

    Questioner

    ありがとうございますm(_ _)m
    やっていることが、よく理解できました。

Your answer might help someone💌