最大的問題是,你永遠不能訪問的input
的元素,只是數組本身。你的if (input % 2 == 1)
行檢查是否數組模2等於1.這沒有意義,因爲你不能真正對數組做數學。
您需要對每個元素執行此操作,因此最小更改將在循環中使用input[i]
。
您可以進行一些其他更改,以及一些可以使代碼更好的慣用模式。如果你在最近的瀏覽器,並有forEach
或map
,你可以用一個結構像更換循環:
var output = input.map(function (it) {
if (it % 2 == 1) return it * 2;
if (it % 2 == 0) return it/2;
});
這仍然可以清理,爲x % 2
永遠只能返回0
或1
,所以你可以用else
更換第二個條件或者只是假設它返回0:
var output = input.map(function (it) {
if (it % 2 == 1) return it * 2;
return it/2;
});
因爲JS是如何處理的真假,特別是數字轉換,則可以省略== 1
(1
是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);
感謝v多少爲它確實有助於!!!! :) – 2015-02-11 15:51:25