2015-02-11 74 views
0

我試圖獲得一個數組,我調用了input並遍歷它。從輸入修改數組,然後返回一個輸出

如果任何值是奇數然後他們得到2.

乘以如果有任何甚至他們得到除以2,然後被推到一個輸出陣列,我可以然後返回。

到目前爲止,我都這樣了,(用cmd節點):

function modify(input) { 
    var output = []; 
    for (i=0; i=input.length; i++) { 
     if (input % 2 == 1) { 
      input*2; 
      output.push[input]; 
     } 
     if (input % 2 == 0) { 
      input/2; 
      output.push[input]; 
     } 
    } 
    return output; 
} 

module.exports.modify = modify; 

回答

0

有些事情,我在你的代碼中看到:

  • 你沒有得到的值出input,你正在使用的整個陣列代替。
  • 您的循環的終止條件設置錯誤(應該是i < input.length
  • 你並沒有使用你的操作(input*2input/2)的結果回值。即使你沒有引用數組本身,你也會插入一個未修改的值。
  • 您使用括號,而不是括號,當你調用push()

試試這個:

function modify(input) { 
    var output = []; 
    for (i=0; i<input.length; i++) { 
     var inval = input[i]; 
     if (inval % 2 == 1) { 
      inval = inval*2; 
      output.push(inval); 
     } else { 
      inval = inval/2; 
      output.push(inval); 
     } 
    } 
    return output; 
} 
+0

感謝v多少爲它確實有助於!!!! :) – 2015-02-11 15:51:25

1

最大的問題是,你永遠不能訪問的input的元素,只是數組本身。你的if (input % 2 == 1)行檢查是否數組模2等於1.這沒有意義,因爲你不能真正對數組做數學。

您需要對每個元素執行此操作,因此最小更改將在循環中使用input[i]

您可以進行一些其他更改,以及一些可以使代碼更好的慣用模式。如果你在最近的瀏覽器,並有forEachmap,你可以用一個結構像更換循環:

var output = input.map(function (it) { 
    if (it % 2 == 1) return it * 2; 
    if (it % 2 == 0) return it/2; 
}); 

這仍然可以清理,爲x % 2永遠只能返回01,所以你可以用else更換第二個條件或者只是假設它返回0:

var output = input.map(function (it) { 
    if (it % 2 == 1) return it * 2; 
    return it/2; 
}); 

因爲JS是如何處理的真假,特別是數字轉換,則可以省略== 11是truthy)而交換條件三元:

var output = input.map(function (it) { 
    return (it % 2) ? it * 2 : it/2; 
}); 

既然你這個包裝成一個功能,如果你使用map然後output不是絕對必要的,所以你可以做:

module.exports.modify = function (input) { 
    return input.map(function (it) { 
     return (it % 2) ? it * 2 : it/2; 
    }); 
}; 

如果你有ES6支持(通過the brilliant 6to5 project有可能的),你可以用箭頭功能替換函數聲明:

module.exports.modify = (input) => { 
    return input.map((it) => { 
     return (it % 2) ? it * 2 : it/2; 
    }); 
}; 

如果你婉噸至得到它真正的學術,你可以刪除return報表(感謝箭頭功能):

module.exports.modify = input => input.map(it => it % 2 ? it * 2 : it/2); 
0

這是錯誤的:

for (i=0; i=input.length; i++) { 
     if (input % 2 == 1) { 

input是整個陣列。你不能用2來模擬一個數組。

你需要檢查各個元素與[]操作:

if (input[i] % 2 == 1) ... 

同樣適用的if條件的機構內:

 input*2; 
     output.push[input]; 

這必須input[i] * 2,你還需要到商店那個價值。現在,你有兩個無關的陳述:input * 2,(如果它是正確的)將計算值並丟棄它。然後(再次,您的語法是正確的,您需要()而不是[]此處)output.push[input]會將原始值附加到output

[]用於訪問數組中的元素,()用於調用函數。 push是一個函數。該行可以正確寫爲:

output.push(input[i] * 2) 
0

這裏有一些錯誤;

你的for循環條件確保我是等於數組的長度不小於它。除非你的輸入數組是空的,否則循環將永遠不會運行。

for(var i = 0; i < input.length; i++)

你檢查是否輸入(陣列)被2整除,如果不輸入內部的元件是。

if(input[i] % 2 === 1)

你還對數組對象,而不是數組中的元素進行數學運算,你也不會在任何地方堅持它。

var multiplied = input[i] * 2;

你調用輸出數組的push方法作爲數組,而不是一個函數調用。

output.push(multiplied);

相關問題