修改输入中的数组,然后返回输出
Modifying arrays from an input then returning an output
我正试图获得一个我称为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;
最大的问题是永远无法访问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
是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(可能是通过出色的6to5项目),您可以用箭头函数替换函数声明:
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);
我在您的代码中看到的一些东西:
- 您没有从
input
中获取值,而是使用整个数组 - 您的for循环的终止条件设置错误(应为
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;
}
这是错误的:
for (i=0; i=input.length; i++) {
if (input % 2 == 1) {
CCD_ 22是整个阵列。你不能用2来模化一个数组。
您需要使用[]
操作符检查单个元素:
if (input[i] % 2 == 1) ...
这同样适用于if
条件的主体内部:
input*2;
output.push[input];
这需要是input[i] * 2
,并且还需要存储该值。现在,您有两个不相关的语句:input * 2
,它(如果正确的话)会计算值并丢弃它。然后(再说一遍,您的语法是正确的,这里需要()
而不是[]
)output.push[input]
会将原始值附加到output
。
[]
用于访问数组中的元素,()
用于调用函数。CCD_ 33是一个函数。该行可以正确地写为:
output.push(input[i] * 2)
这里有一些错误;
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);
- 将元素移动到右侧,然后返回到左侧
- 如何点击标题中的链接,然后返回HTML、Javascript和CSS
- 如何比较两个数组,然后返回差异的索引
- 使用函数for循环遍历对象以更改值,然后返回结果
- Javascript:编写一个函数,接收一个数组,然后返回一个只有唯一数字的数组,只删除数组
- AngularJS工厂调用PHP,然后返回AngularJS
- 从mysql数据库中删除项目,然后返回最后一页
- 每次我点击我的网站,它都会重定向到home.html,然后返回到我点击的所需url
- 修改输入中的数组,然后返回输出
- 如何将 $http.put 封装到一个函数中,该函数执行某些操作,然后返回通过或失败的承诺
- Javascript 的提示,它接受简单的数学作为值,然后返回答案
- 铁:路由器工作很奇怪 - 将我发送到模板然后返回
- 在 中显示警告框 asp.net 将重定向到空白页,然后返回到原始页面
- 导演.js和涡轮链接 - 更改窗口哈希并使用然后返回
- Javascript函数,它接受可变数量的参数 - 更改它们的值 - 然后返回它们
- 我可以将字段保留在填充的表单中,即使我移动到其他页面然后返回
- javascript重定向到带有表单操作post的页面,然后返回到带有输入值的上一页
- 从垂直滚动到水平滚动,然后返回到垂直滚动
- 使用isNan()函数将参数从html传递给javascript,并检查值然后返回值
- 循环通过LI's在一个顺序中,然后返回另一个顺序,同时逐渐消失