質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

2回答

116閲覧

Node.js every メソッドの挙動

t-cool

総合スコア71

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/03/06 04:27

編集2020/03/06 04:28

実行環境は、次の通りです。

$ node Welcome to Node.js v13.3.0. Type ".help" for more information. >

every メソッドに渡す callback 関数ですが、

x => 式

の形式ではうまく判定されるのですが、

(x) => { 式 }

の形式で渡すと判定がうまくいなかいのはなぜでしょうか?

> arr [ 'hiroki', 'taro', 'goro' ] > arr.every(x => x.includes('o')) true > arr.every((x) => {x.includes('o')}) false

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

アロー関数は1行で即returnする関数作る時のみ例外として{}を抜いて省略した書き方が可能となります。
{}を付けるとreturn文の明示が必要になります。

では早速デベロッパーツールのコンソールで確認しましょう。
アロー関数を作ってカッコで包み、適当な値を投げ込んで実行してみます。

> (x => x.includes('o'))('hiroki') true > (x => {x.includes('o')})('hiroki') undefined

ただし、単品{}ブロックスコープを作った場合、最後の行が戻り値という挙動をします。
紛らわしいですが頑張って覚えてください。

> { > const hoge = 123; > const piko = 234; > hoge; > } 123 > { 123 } 123

everyに関して

MDNが間違いないのでざっと紹介
Array.prototype.every

コードでeveryの挙動を説明するとこんな感じになります。

js

1const every = (arr, cb) => { 2 for (let i = 0; i < arr.length; i++) { 3 // 1個でもfalseっぽい値になったらfalseを返す 4 if (cb(arr[i]) == false) return false; 5 } 6 return true; 7}

undefined==で比較した時にfalseとして扱われる値なので、
毎回undefinedしか返さない関数と組み合わせたらそりゃfalseにしかなりません。

投稿2020/03/06 05:28

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t-cool

2020/03/06 12:11

ご助言、ありがとうございます! 「アロー関数の場合、{}を付けるとreturn文の明示が必要になる」と覚えます。 every の実装も合わせて読ませていただき、勉強になりました。 ありがとうございました!
guest

0

判定がうまくいなかいのはなぜでしょうか?

(x) => { 式 } のように、右辺を {, } で囲った場合、返り値を return 文で明示する必要があります。

Array.every に渡す関数は bool値の返却を期待していますが、 return 文が省略され、undefined (falsy)と判定されています。

投稿2020/03/06 04:40

AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t-cool

2020/03/06 05:13

ご助言、ありがとうございます! ``` arr.every((x) => {return x.includes('o')}) ``` としてうまくいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問