2015-02-11 49 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);

相关问题