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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

610閲覧

JavaScript、エクササイズ、模範解答の解説をお願いします。

Behemoth

総合スコア29

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/05/09 00:40

編集2018/05/09 00:50

JavaScript 初心者のものです。現在主に、codewarsというサイトを使って学習しています。
そこで、「引数に数字をとり、その数字未満の3、もしくは5の倍数の合計を求める関数を作成せよ。ただし、公倍数は一度だけ合計の中に足すように」という課題がありました。

課題はクリアしたのですが、模範回答の中に一つだけ何度読み返してもうまく理解できないものがあり、解説をお願いしたいです。中に使われているアロー関数、reduceメソッド等については調べました。

solution = n=> n<=0?0:Array.from({length: n}, (_,i) => (i%3==0||i%5==0)i:0).reduce((x,y)=>x+y)

こちらになります。
特に{length: n}, (_,i)部分が理解不能です。

よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2018/05/09 00:45

質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わります。また、自身が分かっていること、分かっていないことを明確にしてください。https://teratail.com/help/question-tips#questionTips2-1
Behemoth

2018/05/09 00:51

教えていただきありがとうございます。また忘れてしまいました。以後気を付けますm(__)m
guest

回答1

0

ベストアンサー

極端にショートコーディングされていますので、展開していきましょう。

javascript

1// 全体は、nを引数に取る関数(元のコードではarrow function) 2var solution = function(n) { 3 // 0未満ならチェックするまでもなく0(元のコードでは三項演算子) 4 if(n <= 0) return 0; 5 6 const emptyArr = Array.from( 7 // Array.fromの動作上、このオブジェクトは 8 //「0~n-1までundefinedが入った配列」に変換される 9 {length: n}, 10 ); 11 // Array.fromの第2引数はArray#mapをかけるのと同じ 12 const conditionArr = emptyArr.map(function(_, i){ 13 // 第2引数に、インデックスが来る(どうせ値はundefined) 14 // どちらでも割り切れないものは0に変えて、合計計算から除外 15 return (i%3==0||i%5==0) ? i : 0; 16 }); 17 // あとはreduceで総合計 18 return conditionArr.reduce((x,y)=>x+y); 19};

投稿2018/05/09 00:50

編集2018/05/09 00:50
maisumakun

総合スコア145184

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

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

Behemoth

2018/05/09 00:51

ご回答ありがとうございます! 確認させていただきます。
maisumakun

2018/05/09 00:58

元のコードから?が1つ抜けていますので、そこは補いました((i%3==0||i%5==0)「?」i:0)。
Behemoth

2018/05/09 01:20

承知しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問