我刚刚注册了代码战,我正在尝试第一个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;
答案 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个问题,可能会阻止您继续进行,
return array
可能会引发语法错误,因为它超出了功能 multiplyBy
会将新值附加到上一个数组的末尾2, 4, 6
的示例输入但在您的2, 2, 2
中使用了{{1}}自己的代码作为最后一点,尝试进入缩进代码的习惯,以后可以省去阅读它的麻烦,因为它可以让你快速查看块开始和结束的位置
答案 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 强>