たとえば全部"ゴミ記事"だったら

たとえば全部"ゴミ記事"だったら:


全部〇〇だったら△△したい

配列の中のすべての要素が〇〇だったら、△△の処理をしたい。

逆に、ひとつでも〇〇じゃない要素があったら✗✗したい。

こんな場面、割とよくありますよね。

そんなときはeveryメソッドを使うと便利です。


まずはeveryメソッドを使わずに書いてみる

まずはforEachで書いてみます。

もし全部"ゴミ記事"だったら「全部ゴミ記事!」と表示するプログラムです。

script.js
const Qiita = ["ゴミ記事", "ゴミ記事", "ネタ記事", "ゴミ記事", "ゴミ記事"]; 
//ゴミ記事が4つ、ネタ記事が1つ入った配列を、定数Qiitaに格納。 
 
let allGomi = true; 
//初期値ではtrue。 
 
//forEachで全部の記事を回します。 
Qiita.forEach(kiji => { 
    if(kiji !== "ゴミ記事"){ 
        allGomi = false; 
        //一つでもゴミ記事じゃない要素があればfalseが代入される。 
    } 
}); 
 
if(allGomi){ 
    alert("全部ゴミ記事!"); 
}else{ 
    alert("良記事もあるだろ!"); 
} 
変数allGomiに初期値としてtrueを入れておいて、

forEachで全要素を回して、一つでもゴミ記事じゃないのがあれば
allGomifalseになる、という流れですね。


everyを使ってみる

everyメソッドを使うともう少しシンプルに書けます。

script.js
/* 〜〜〜省略〜〜〜 */ 
 
const allGomi = Qiita.every(kiji => { 
    return kiji === "ゴミ記事"; 
}); 
 
/* 〜〜〜省略〜〜〜 */ 
everyメソッドは真偽値を返します。

つまり、実行するとtrueかfalseに変身するわけですね。

それを定数allGomiに格納します。

everyメソッドは、引数として関数を1つ受け取ります。1

そのコールバック関数を、配列のすべての要素に対して適用してくれます。

forEachに似てますね。

今回の例でいうと、5個の要素に対してコールバック関数を適用してくれるのですが、

その関数が5回ともtrue2を返した場合に定数allGomitrueが入るわけです。

逆に関数が1回でもfalseを返すとallGomifalseになります。

なので、コールバック関数の中を

script.js
return kiji === "ゴミ記事"; 
としておけば、コールバック関数が実行されるたびにその要素がゴミ記事かどうかの真偽値が返され、結果としてallGomiには(今回は)falseが入るわけですね。

アロー関数であれば、returnを省略して

script.js
const allGomi = Qiita.every(kiji => kiji === "ゴミ記事"); 
と1行で書くこともできますね。


ほかにも

JavaScriptの配列3は、ほかにもsome、map、filter、reduceなど

便利なメソッドをたくさん持っています。

これらを使いこなすと、色々な処理や条件を1行でスッキリと書けたりするので、ぜひ色々使ってみましょう。



  1. 第二引数を渡すこともできます。 



  2. 「trueとみなされる値」でもOKです。 



  3. 正しくは「配列のprototype」が持っているメソッドですね。 


コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2024-02-12 22:08:06 RSSフィード2024-02-12 22:00分まとめ(7件)