for文の中でif文があるケースで該当するものがあればそれを代入。なければ、特定のキーの値を代入するケースで、次のように書いたのですが、もっとスマートな書き方や別の方法をもしご存知でしたら教えていただけないでしょうか。
javascript
1var datas = ['hoge', 'fuga', 'piyo']; 2var value = '' 3var flag = false; 4 5for (var key in datas) { 6 if(datas[key] == 'fuga'){ 7 value = datas[key]; 8 flag = true; 9 break; 10 } 11} 12 13if (! flag) { 14 value = datas[0]; 15}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/21 05:34 編集
回答8件
0
状況次第だと思いますがこのケースだと、
JavaScript
1var datas = ['hoge', 'fuga', 'piyo']; 2var value; 3 4value = datas[0]; 5for (var key in datas) { 6 if(datas[key] == 'fuga'){ 7 value = datas[key]; 8 } 9}
でしょうか。
あと、datas
って、もしかして英単語のdata
を忘れたのでしょうか。
data
が複数形ですよ(複数形が不規則変化の名詞)。
投稿2018/07/20 13:23
総合スコア86060
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/20 14:40
退会済みユーザー
2018/07/20 22:35
退会済みユーザー
2018/07/20 22:35
退会済みユーザー
2018/07/20 22:42
2018/07/21 02:35
退会済みユーザー
2018/07/21 03:58
2018/07/21 04:08
退会済みユーザー
2018/07/21 04:26
0
こんにちは。
配列の中に特定の値が含まれているかどうかの判定について、補足します。
ES2016 から Array.prototype.includes が追加され、Javascript にも実装されています。
javascript
1const datas = ['hoge', 'fuga', 'piyo']; 2 3console.log(datas.includes('fuga')); // => true 4console.log(datas.includes('foo')); // => false
indexOf
を使った場合と違うのは、NaN
が含まれるかどうかを判定できることです。
javascript
1const numbers = [1, 2, 3, NaN]; 2 3console.log(numbers.includes(NaN)); // => true 4console.log(numbers.indexOf(NaN)); // => -1
以下、上記のデモです。
https://jsfiddle.net/jun68ykt/we5u8ar1/3/
参考になれば幸いです。
投稿2018/07/21 00:08
総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/21 00:10
退会済みユーザー
2018/07/21 00:13
2018/07/21 01:56
退会済みユーザー
2018/07/21 02:09
2018/07/21 03:24
0
私はこの質問を読んだ時、2つの答えを用意出来ましたが、質問文のどちらにフォーカスすべきか判断できませんでした。
ベストアンサー結果を見る限りでは、前者が正解でしたが、どちらの答えも正解になりうるように読めました。
スマートな書き方
もっとスマートな書き方や別の方法をもしご存知でしたら教えていただけないでしょうか。
単純に質問文のコードをスマートに書きたいだけのパターン。
JavaScript
1var array = ['hoge', 'fuga', 'piyo']; 2var result = array.includes('fuga') ? 'fuga' : array[0]; 3 4console.log(result); // "fuga"
for文内の条件式が偽だった場合を判定
for文の中でif文があるケースで該当するものがあればそれを代入。なければ、特定のキーの値を代入するケースで、
条件式の内容はどうでもよく、for文の外で条件式の真偽判定して代入値を制御したいパターン。
JavaScript
1function sample1 (array) { 2 var result = array[0]; // 初期値を与える 3 4 for (let value of array) { 5 if (value === 'fuga') { 6 result = 'fuga'; 7 break; 8 } 9 } 10 11 return result; 12} 13 14var array1 = ['hoge', 'fuga', 'piyo'], 15 array2 = ['hoge', 'fuga2', 'piyo']; 16 17console.log(sample1(array1)); // "fuga" 18console.log(sample1(array2)); // "hoge"
while
文版。
JavaScript
1function sample2 (array) { 2 var i = array.length; 3 4 while (--i > 0 && array[i] !== 'fuga'); 5 6 return array[i]; 7} 8 9var array1 = ['hoge', 'fuga', 'piyo'], 10 array2 = ['hoge', 'fuga2', 'piyo']; 11 12console.log(sample2(array1)); // "fuga" 13console.log(sample2(array2)); // "hoge"
Re: yoshipu さん
投稿2018/07/21 02:28
編集2018/07/21 03:41総合スコア18189
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/21 03:05
退会済みユーザー
2018/07/21 03:38
2018/07/21 03:46
退会済みユーザー
2018/07/21 03:49
退会済みユーザー
2018/07/21 03:51
退会済みユーザー
2018/07/21 04:04
2018/07/21 05:59 編集
退会済みユーザー
2018/07/21 06:16
退会済みユーザー
2018/07/21 06:19 編集
0
今回は「あるかどうか」だけ調べればいいので、Array.prototype.indexOf
を使いましょう(MDN)。
javascript
1var datas = ['hoge', 'fuga', 'piyo']; 2var value = '' 3 4if(dates.indexOf('fuga')!== -1) { 5 value='fuga'; 6} else { 7 value=dates[0]; 8}
投稿2018/07/20 13:24
総合スコア146237
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/20 13:25
2018/07/20 14:03
2018/07/20 14:39
退会済みユーザー
2018/07/20 22:31
2018/07/20 22:53
退会済みユーザー
2018/07/20 22:58
0
ベストアンサー
javascript
1var datas = ['hoge', 'fuga', 'piyo']; 2var value = (datas.indexOf('fuga') != -1) ? 'fuga': datas[0]; 3console.log(value);
投稿2018/07/20 13:26
編集2018/07/20 17:36退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/20 14:38
2018/07/20 17:25
退会済みユーザー
2018/07/20 17:36
2018/07/20 20:43
退会済みユーザー
2018/07/20 22:31
2018/07/21 02:10
退会済みユーザー
2018/07/21 03:46
2018/07/21 06:28
退会済みユーザー
2018/07/21 06:33
0
for文の中でif文があるケースで該当するものがあればそれを代入。なければ、特定のキーの値を代入するケース
このケースだと、「なければ」の部分を読み替えて、最初に代入してあげるときれいになります。
JavaScript
1var value = datas[0];
今回は関係ないですけど、flag って出てきたら、continue
とか break
とかと配列組み合わせるとイケるんじゃね?って考えるときれいに書けるケースが多いです。
投稿2018/07/21 02:19
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/21 02:50
退会済みユーザー
2018/07/21 03:54
退会済みユーザー
2018/07/21 03:55
退会済みユーザー
2018/07/21 04:04
退会済みユーザー
2018/07/21 04:09
退会済みユーザー
2018/07/21 04:21
退会済みユーザー
2018/07/21 04:33
退会済みユーザー
2018/07/21 04:34
退会済みユーザー
2018/07/21 04:56
退会済みユーザー
2018/07/21 05:01
退会済みユーザー
2018/07/21 05:24
退会済みユーザー
2018/07/21 05:27
退会済みユーザー
2018/07/21 05:29
退会済みユーザー
2018/07/21 05:32
退会済みユーザー
2018/07/21 05:33
退会済みユーザー
2018/07/21 05:36
退会済みユーザー
2018/07/21 05:37
退会済みユーザー
2018/07/21 05:42
0
なんでこんなバカ回答ばっかりに…
お題を変えちゃダメだろ。
何の勉強にもならない小手先技ばっか覚えてもしょうがねぇだろうに。
これだからふろんとえんじにぁーはダメなんだよ。
みやびも間違い探しとかやってないで
もっと教えるべきことを教えろよ。
投稿2018/07/20 22:29
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/20 23:09
退会済みユーザー
2018/07/20 23:10
退会済みユーザー
2018/07/20 23:11
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。