如何在javascript中使用循环中的整数填充数组

时间:2015-04-16 21:29:16

标签: javascript arrays

我刚刚注册了代码战,我正在尝试第一个kata。这是个问题:

编写一个函数,将数字(x)乘以给定数(y)一定次数(n)。结果将以数组形式返回。 例如。 multiplyBy(2,4,6); 输出为:[8,32,128,512,2048,8192]

我相信我的代码是写的,当我做console.log时,我得到了练习要求的数组,但它不会让我继续。我很感激一些帮助,谢谢!

var array  = [];
function multiplyBy(x, y, n) {
while (x<2049){
var z = x*y*n;
var x = z;
array.push(z)
}
}
multiplyBy(2,2,2);
console.log(array);
return array;

4 个答案:

答案 0 :(得分:2)

你的功能之外还有一些事情让它只能工作一次。确保将所有内容保留在函数内,直​​到最后return

function multiplyBy(x, y, n) {
    var array = []; // var this inside your function
    for (; n > 0; --n) { // the loop is only supposed to happen n times
        x = x * y; // you can reuse this variable (x)
        array.push(x);
    }
    return array; // return statement should be inside your function
}

// example of logging the returned value
console.log(multiplyBy(2, 4, 6)); // [8, 32, 128, 512, 2048, 8192]

您的while循环也被硬编码到x<2049,但情况并非如此,因为它取决于赋予函数的n参数


  

它不会让我继续

您发布的代码中有3个问题,可能会阻止您继续进行,

  1. return array可能会引发语法错误,因为它超出了功能
  2. 在您的代码中,多次调用multiplyBy会将新值附加到上一个数组的末尾
  3. 他们可能正在针对其他值集测试您的函数以检查它是否按预期工作,这在您的函数中是不正确的,即您提供了2, 4, 6的示例输入但在您的2, 2, 2中使用了{{1}}自己的代码

  4. 作为最后一点,尝试进入缩进代码的习惯,以后可以省去阅读它的麻烦,因为它可以让你快速查看块开始和结束的位置

答案 1 :(得分:1)

您的return不在此功能范围内。所有对multiplyBy的调用都会填充相同的数组。你的逻辑是有缺陷的。

可能应该是

function multiplyBy(x, y, n) {
  var array  = [];
  while (n--) array.push(x *= y)
  return array;
}
console.log(multiplyBy(2,4,6));

或者,在ECMAScript 6中,

var multiplyBy = (x, y, n) => Array(n).fill().map(a => x*=y);

答案 2 :(得分:0)

在最后移动返回,这必须在函数中用于返回一些东西,如果没有使用该函数将返回undefined。

答案 3 :(得分:0)

看看这个(单线解决方案):

function multiplyBy(x,y,n) {
    return Array.apply(null, new Array(n)).map(function(v, i) { return x * Math.pow(y, i + 1); });
}

<强> DEMO