javascriptについてN予備校で学んでいます。
始めたばかりの初心者です。
いま、名前を入力すると、性格診断結果が表示されるというものを作っていて
jsのコードは下記になっています。
assesment.js
1'use strict'; 2const answers= [ 3 '{userName}のいいところは声です。{userName}の特徴的な声は皆を惹きつけ、心に残ります。', 4 '{userName}のいいところはまなざしです。{userName}に見つめられた人は、気になって仕方がないでしょう。', 5 '{userName}のいいところは情熱です。{userName}の情熱に周りの人は感化されます。', 6 '{userName}のいいところは厳しさです。{userName}の厳しさがものごとをいつも成功に導きます。', 7 '{userName}のいいところは知識です。博識な{userName}を多くの人が頼りにしています。', 8 '{userName}のいいところはユニークさです。{userName}だけのその特徴が皆を楽しくさせます。', 9 '{userName}のいいところは用心深さです。{userName}の洞察に、多くの人が助けられます。', 10 '{userName}のいいところは見た目です。内側から溢れ出る{userName}の良さに皆が気を惹かれます。', 11 '{userName}のいいところは決断力です。{userName}がする決断にいつも助けられる人がいます。', 12 '{userName}のいいところは思いやりです。{userName}に気をかけてもらった多くの人が感謝しています。', 13 '{userName}のいいところは感受性です。{userName}が感じたことに皆が共感し、わかりあうことができます。', 14 '{userName}のいいところは節度です。強引すぎない{userName}の考えに皆が感謝しています。', 15 '{userName}のいいところは好奇心です。新しいことに向かっていく{userName}の心構えが多くの人に魅力的に映ります。', 16 '{userName}のいいところは気配りです。{userName}の配慮が多くの人を救っています。', 17 '{userName}のいいところはその全てです。ありのままの{userName}自身がいいところなのです。', 18 '{userName}のいいところは自制心です。やばいと思ったときにしっかりと衝動を抑えられる{userName}が皆から評価されています。' 19] 20/** 21 * 22 * @param {string} userName ユーザーの名前 23 * @return {string} 診断結果 24 */ 25function assessment(userName){ 26 let sumOfcarCode= 0; 27 //全文字のコード番号を取得して足し合わせる 28 for (let i=0; i<userName.length; i++){ 29 sumOfcarCode= sumOfcarCode+ userName.charCodeAt(i); 30 } 31 //文字コード番号を回答の数で割って添え字の数値を求める 32 const index= sumOfcarCode% answers.length; 33 let result= answers[index]; 34 result= result.replace(/\{userName\}/g, userName); 35 return result.replace(/\{userName\}/g, userName); 36} 37//テストコード 38console.assert( 39 assessment('太郎')=== 40 '太郎のいいところは決断力です。太郎がする決断にいつも助けられる人がいます。', 41 '診断結果の文言の特定の部分を名前に書き換える処理が正しくありません' 42); 43console.assert( 44 assessment('太郎')=== 45 assessment('太郎'), 46 '入力が同じ名前なら同じ診断結果を出力する処理が正しくありません。' 47);
この時、質問なのですが
function assessment(userName){ let sumOfcarCode= 0; //全文字のコード番号を取得して足し合わせる for (let i=0; i<userName.length; i++){ sumOfcarCode= sumOfcarCode+ userName.charCodeAt(i); } //文字コード番号を回答の数で割って添え字の数値を求める const index= sumOfcarCode% answers.length; let result= answers[index]; result= result.replace(/\{userName\}/g, userName); return result.replace(/\{userName\}/g, userName); }
assessment関数内で定義されてる、sumOfcarCodeを関数外に出して、
下記のように定義すると、エラーが起こってしまうようです。
var sumOfcarCode= 0; function assessment(userName){ //全文字のコード番号を取得して足し合わせる for (let i=0; i<userName.length; i++){ sumOfcarCode= sumOfcarCode+ userName.charCodeAt(i); } //文字コード番号を回答の数で割って添え字の数値を求める const index= sumOfcarCode% answers.length; let result= answers[index]; result= result.replace(/\{userName\}/g, userName); return result.replace(/\{userName\}/g, userName); }
letとvarのスコープが関係ありそうな気がするのですが、
なぜエラーになるのでしょうか。。。
エラー内容は下記です。
Assertion failed: 入力が同じ名前なら同じ診断結果を出力する処理が正しくありません。 (anonymous) @ assesment.js:44
初心者なので右も左もわかりませんが、
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/13 06:50