2015-10-13 66 views
3

该算法应该将数组的两个元素相加,并将它们插入总和中使用的两个元素之间。我的功能是不打印任何东西

实施例输入==>输出:

[1, 2, 3, 4] ==> [ 1, 3, 2, 5, 3, 7, 4]  

function growArray() { 
 
    var sequence = []; 
 
    sequence = window.prompt("Enter a number sequence", "1 2 3 4"); 
 
    for (var i = 0; i < sequence.length - 1; i += 2) { 
 
     if (!((i + 1) in sequence)) { 
 
      return; 
 
     } // prevent out of bounds access 
 
     var new_value = sequence[i] + sequence[i + 1]; 
 
     sequence.splice(i + 1, 0, new_value); // insert value at i + 1 
 
    } 
 

 
    for (var v in sequence) { 
 
     document.write(v + ", "); 
 
    } 
 
}
<p> 
 
    <input id="f1" type="button" value="Function 1" onclick="growArray();" />Click to expand array 
 
</p>

+3

'if(!((i + 1)in sequence))'不会起作用,因为sequence只是一个字符串。 '.split(“”)'如果这是预期的输入。 –

+0

确保你检查了控制台:'Uncaught TypeError:不能使用'in'运算符在1 2 3 4'中搜索'1'。 –

+0

TypeError:无效'in'操作数序列 –

回答

2

这里是得到输出

function growArray() { 
 
    var input = window.prompt("Enter a number sequence", "1 2 3 4"); 
 
    var sequence = input.split(" "); 
 
    for (var i = 0; i < sequence.length - 1; i += 2) { 
 
     if (i + 1 > sequence.length) { 
 
      return; 
 
     } // prevent out of bounds access 
 
     var new_value = parseInt(sequence[i]) + parseInt(sequence[i + 1]); 
 
     sequence.splice(i + 1, 0, new_value); // insert value at i + 1 
 
    } 
 
    document.write(sequence.toString()); 
 
}
<p> 
 
    <input id="f1" type="button" value="Function 1" onclick="growArray();" />Click to expand array 
 
</p>

0

您必须将split用户输入到数组(序列)中。

该数组包含字符串值,因为用户输入是字符串。 所以你必须在int中映射这些值,以便添加它们。

var sequence = '1 2 3 4'.split(' ').map(Number); 
for(var i=0; i<sequence.length - 1; i+=2) { 
    sequence.splice(i+1, 0, sequence[i] + sequence[i+1]); 
} 
document.write(sequence.join(', ')); 

工作example

0

有几个点的眼光来看待你的代码。

sequence是一个数组,但你没有定义一个类型,或者甚至解析了输入。据我所知,它是一个字符串数组。

Documentation states: The split() method splits a String object into an array of strings by separating the string into substrings.

然后,你的数组不断变化,而你的工作。虽然这不是错误,但它对于手头的任务来说是“奇怪的”,而且对于语言来说显然是统治。

example(){ 
    var original = [1, 2, 3, 4]; 
    var result=[]; 
    for(var i=0;i<original.length;i++){ 
     result.push(original[i]); 
     if(i<original.length-1){ 
     result.push(original[i]+original[i+1]); 
     } 
    } 
    alert(result); 
} 
+0

我不明白为什么我不得不创建一个全新的阵列来完成这项任务。请检查我的答案,这对我来说很清楚。 – user2296177

+0

你不需要。通常建议将每个变量保留一个类型。在JavaScript中你可以这样做:var something = true;'然后'something * = 3',然后'something =“一个字符串”;'这使得调试和维护代码非常困难。所以,你应该有一个数组用于字符串,一个用于数字...接受的答案是一个“工作”的代码,就像问题提出的问题一样。然而,如果你输入“1,2,某些东西”,你的代码会得到错误的结果'1,3,2,...,NaN,something'。重要的是要知道用户是...特别的...并且如果你的问题他们永远不会阅读/遵守 – Bonatti