2016-09-26 163 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:无法在eval:13:11处读取未定义的 的属性'替换',这对我来说没有意义,因为它在它的右上方。有人可以告诉我为什么这段代码不会运行吗?

+0

'howM'需要是一个数字,与循环中的'i'进行比较。 – DaveCoast

+0

它是一个数字,当它提示我输入4时,它在第一个for循环中工作,我不明白为什么这会导致替换部分通过函数的一半出现问题。 –

+0

我对javascript的规则并不了解。我知道在某些情况下可以省略分号......我们确定'var eXt'这行是其中一种情况吗? (我会在该行的末尾添加一个分号。)但更好奇的是函数名称'replace'和开头的paren之间的空格。该错误使得它看起来像JavaScript看到'replace'作为一个属性,而不是一个函数。我怀疑问题是在开幕之前的空白。我建议你在删除空格后尝试它,例如'eXt.replace(...)'; – spencer7593

回答

1

循环for(var i = 0; i <= howM; i++)的整体不包含在大括号{..}中。因此,只有语句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

仍然说undefined –

+0

仍然说undefined –

0

第二for循环没有它周围的支架。您可以必须使用括号除非它是一个单线循环。例如:

这是罚款:

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); 
} 

此外在第for循环我会使用arr[i] = value来代替。

+0

这不会运行在所有“SyntaxError:意外的输入结束” –

+0

我错过了在外部for循环结束的括号,但真的你只需要得到一本书,并阅读它。 – Programmer2120