2015-10-13 73 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