2016-09-26 22 views
0
var howM = prompt("How many cards?") 

var arr = []; 
for(var i = 0; i < howM; i++) 
arr.push(prompt("Enter a card:")); 

console.log(arr) 


for(var i = 0; i <= howM; i++) 
var sum = 0; 
var eXt = arr[i] 
eXt = eXt.replace (/-/g, ""); 
for (i = 0; i < eXt.length; i++) { 
sum += parseInt(eXt.substr(i, 1)); } 
console.log(sum); 

これは "TypeError:プロパティの 'replace'をundefinedの でeval:13:11と読み替えることができません。誰かがこのコードが動かない理由を教えてもらえますか?

+0

'howM'は、ループ内の' i'と比較する数値である必要があります。 – DaveCoast

+0

それは数字です。私は4を入れて、最初のforループで動作しますが、なぜその部分が関数の途中で置き換えられているのか分かりません。 –

+0

私はjavascriptのルールについてよく分かりません。私はいくつかのケースではセミコロンを省略できることを知っています... 'var eXt'行がそのようなケースの1つであると確信していますか? (私はその行の最後にセミコロンを追加します)。しかし、もっと興味があるのは、関数名の 'replace'とopening parenの間のスペースです。このエラーはjavascriptが 'replace'をプロパティではなく関数として見ているように見えます。私はその問題がその開かれる前の空白であると思う。その空白を削除した後で試してみることをお勧めします。 'eXt.replace(...)'; – spencer7593

答えて

1

ループのintentended本体は、中括弧{..}で囲まれていません。その結果、ループ内で文var sum = 0;のみが実行されます。また、おそらくi < howMと言っていたことでしょう。

for(var i = 0; i < howM; i++) { 
    var sum = 0; 
    var eXt = arr[i] 
    eXt = eXt.replace (/-/g, ""); 
    for (i = 0; i < eXt.length; i++) { 
     sum += parseInt(eXt.substr(i, 1)); 
    } 
} 
console.log(sum); 
+0

ありがとう、これはこのサイトで得た最初のまともな答えです。あなたが私のことを気にかけていないのであれば、ループが一度走った後、私は未定義になります。なぜあなたは配列の他の部分のために実行されませんか知っていますか? –

+0

あなたが入力した最初の2枚のカードを教えてもらえますか? – redneb

+0

私は上記の私の答えを編集した、それはあなたが探している解決策を持っている可能性があります、ほとんどの行の説明と。 – Howzieky

0

チェックコメント:

var howM = prompt("How many cards?") 

var arr = []; 
for(var i = 0; i < parseInt(howM); i++) 
arr.push(prompt("Enter a card:")); //No curly braces is fine when its a single line. When there's no braces, JS just runs the next line x amount of times 

console.log(arr) 

var sum = 0; //Create sum out here. Setting it to zero every loop defeats the purpose 
for(var i = 0; i < arr.length; i++)//You said "i <= howM". Better to use the length of the array that is being looped through 
{ //Use curly braces to show what code to execute repeatedly 
    var eXt = arr[i]; //Set eXt to the current number 
    eXt = eXt.replace("-", ""); //No need for regex 
    sum += parseInt(eXt); //Convert the input to a number, then add it to sum 
} 
console.log(sum); 
+0

病気これを使用して試してみて、それを使用して私はそれを使用してください –

+0

まだ定義されていないと言う –

+0

はまだ定義されていないと言う –

0

forループがその周りにブラケットを持っていないので、あなたはループのためにこのような何かをしたいです。 MUSTブラケットを使用する UNLESSこれは1行のループです。たとえば:

これが細かいです:

for (var i=0;i<100;i++) 
    console.log(i); 

これではありません:

for (var i=0;i<100;i++) 
    var x = i; 
    x++; 
    console.log(x); 

だからループための第二は、このようになります。最初のforでも

for(var i = 0; i <= howM; i++) { 
    var sum = 0; 
    var eXt = arr[i] 
    eXt = eXt.replace (/-/g, ""); 
    for (i = 0; i < eXt.length; i++) { 
     sum += parseInt(eXt.substr(i, 1)); 
    } 
    console.log(sum); 
} 

代わりにarr[i] = valueを使用します。

+0

これはまったく実行されません "SyntaxError:予期しない入力の終了" –

+0

外側のforループの最後にブラケットが欠けていましたが、実際には本を入手して読むだけで済みます。 – Programmer2120

関連する問題