見出し画像

②Arrayメソッド「Vol.6 スプレッドシートの操作(実践編) :ノンプロ研初心者向けプログラミング講座【GASコース第9期】

ヘッダ画像:トマトソースのイタリア風ロースカツ
今日はこのレシピを作ってもらった。
トマトソース美味しい
ŧ‹”ŧ‹”( ‘ч’ )ŧ‹”ŧ‹”


↓さて、の続きです。


アジェンダ

Arrayオブジェクト ←いまここ
配列を使ったデータ処理
構造化データ

Arrayメソッド

講座では次のメソッドと演習して戯れる。

演習6-01 includesメソッド、indexOfメソッド
演習6-02 宿題 
演習6-03 flatメソッド
演習6-04 宿題 
演習6-05 pushメソッド shiftメソッド(破壊的メソッド)

補足 Jqueryのlengthはなぜlength()ではないのか

うーん、そういうのもあるのかあ?ぐらいの理解度。



演習6-01 includesメソッド、indexOfメソッド

画像2

コードの打ち方、書き方(打たない)

コードを打つときに、一行コピーする shift+Alt+↓(win)が便利だ。

一行の末尾はセミコロン;だが、これを打ち間違えてコロン:にしてしまい、エラーになるというのもよくある。

function宣言はfunction myFunction6_01() {処理}のように、function名のあとに空白の括弧()が入るが、これもよく忘れる。

ドットを打つと候補がでて、さらにiを打つと絞り込まれていく。それぞれの候補を全部しらべているとキリがないので、いま必要なものにフォーカスする。

画像1

includesメソッド

画像5

演習を改変して、このようなコードにしてみた。

function myFunction6_01(){
 const members =['Bob','Tom','Jay'];
 
 console.log(members.includes('Bob'));
 console.log(members.includes('Tom'));
 console.log(members.includes('Jay'));
 console.log(members.includes('Ivy'));
 
 console.log(members.indexOf('Bob'));
 console.log(members.indexOf('Tom'));
 console.log(members.indexOf('Jay'));
 console.log(members.indexOf('Ivy'));
}

includesの結果をみると、

画像6

こうなる。
Ivyはmembarsに居ない=特定の要素が配列に含まれていないので、falseとなる。

MDNのリファレンスのサンプルコードを見ると、

画像6

atのような部分一致はfalseのようだった。


indexOfメソッド

画像6

これは覚えている。うなむにさんに唆されて(笑)名言botの判定フラグをindexOfでどうにか試したことがあった。

今回の演習コードに少し手を加えたものを見てみる。

画像8

画像7

配列内の位置、順番を返すので、Bob=0 ※配列は0スタート となる。
Ivyは存在しないので -1となる。

リファレンスのサンプルコード

画像9

// start from index 2
console.log(beasts.indexOf('bison'2));
// expected output: 4

ここがよく分からなかった。
start from index 2 ということは、camelを基点=0として数え始めて、

'ant', 'bison', 'camel', 'duck', 'bison'
3,4,0,1,2

こういうこと?では、第1引数bisonの意味は?searchElement 検索する配列要素?? あれ??

まてまて、要素bisonを検索したい、検索スタート位置が2=camelだよねこれ。

画像10

ant に変えたら-1になってしまった。

画像11

camel なら 2

うーん??

ちょっと別のパターンで考える。
var array = [2, 9, 9];
array.indexOf(2);     // 0 →わかる。2は配列要素に含まれていて0番目。
array.indexOf(7);     // -1 →わかる、7は配列要素に含まれていないので-1が返る
array.indexOf(9, 2);  // 2 →わかる。要素9を2から検索をはじめると、2番目。
array.indexOf(2, -1); // -1 →わからない。要素2を-1から検索をはじめるとかなにそれ。
array.indexOf(2, -3); // 0 →わからない。要素2を-3から検索をはじめて0とかなにそれ。

indexOfは値が存在するかどうか、ということだよな??
うーん、ちょっとこの辺にしといて先に進む。

宿題 演習6-02

以下のように配列とメンバー名を渡すと、配列内にメンバーが含まれていればtrue、さもなくばfalseと返す関数hasMemberを作成してみましょう。
(includesメソッドと同じ役割を持つ関数ですね。)
function myFunction6_02({
 const members = ['Bob''Tom''Jay'];
 console.log(hasMember(members, 'Tom')); //true
 console.log(hasMember(members, 'Ivy')); //false
}

うむむ、やっぱりどうも、関数に苦手意識というか、ぱっと出てこない。
まずは王道で考えると、こうか?

function myFunction6_02_01({
 const members = ['Bob''Tom''Jay'];
 console.log(hasMember(members, 'Tom')); //true
 console.log(hasMember(members, 'Ivy')); //false
}
function hasMember(arraymember, name{
 return arraymember.includes(name);
}

hasmember関数に、配列(members)とメンバー名(Tomなど)を渡し、そこで、includesメソッドして返す。


で、これをアローにするには?

//宿題 02 アロー基本形
function myFunction6_02_02({

 const hasMember02 = (arraymember, name) => {
   return arraymember.includes(name);
 }

 const members = ['Bob''Tom''Jay'];
 console.log(hasMember02(members, 'Tom')); //true
 console.log(hasMember02(members, 'Ivy')); //false
}

//宿題 03 アロー 戻り値がひとつなので、{}とreturnを省略
function myFunction6_02_03({

 const hasMember03 = (arraymember, name) => arraymember.includes(name);

 const members = ['Bob''Tom''Jay'];
 console.log(hasMember03(members, 'Tom')); //true
 console.log(hasMember03(members, 'Ivy')); //false
}

こうかなあ~~~。かにみそ先生直伝のアロー関数のスライドや、過去講座の回答や、同期の回答も参考にしつつ。


続く。

↓続き





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

good-sun(a03)
いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!