最大的问题是,你永远不能访问的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