我试图获取一个我称之为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 :(得分:1)
最大的问题是你永远不会访问input
的元素,只是数组本身。您的if (input % 2 == 1)
行检查数组 mod 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处理true和false的方式,特别是转换数字,你可以省略== 1
(1
是真实的),并将条件换成三元:
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);
答案 1 :(得分: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)
答案 2 :(得分:0)
这里有一些错误;
你的for循环条件确保i 等于数组的长度,而不是小于它。除非您的输入数组为空,否则循环将永远不会运行。
for(var i = 0; i < input.length; i++)
您正在检查输入(数组)是否可以被2整除,而不是输入中的元素是否为。
if(input[i] % 2 === 1)
您还要对数组对象执行数学运算,而不是对数组中的元素执行数学运算,并且您不会将其保持在任何位置。
var multiplied = input[i] * 2;
您将输出数组的push方法称为数组,而不是函数调用。
output.push(multiplied);
答案 3 :(得分:0)
我在您的代码中看到的一些内容:
input
中获取值,而是使用整个数组。i < input.length
)input*2
和input/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;
}