我有一个函数可以推送数字"数字"到"输出"具有给定数量的"次"的数组。出于某种原因,在递归调用函数期间,"输出"数组成为一个数字,因此推送方法停止工作。任何人都可以向我解释为什么"输出"递归期间的变量变化?
function replicate(times, number, output) {
if (output == undefined) output = [];
if (times < 0) {
return [];
} else if (times == 0) {
return output;
} else {
console.log(output, typeof output);
return replicate(times - 1, number, output.push(number));
}
}
//logs
//[] 'object'
//1 'number'
此致
答案 0 :(得分:1)
这是因为数组上push方法的返回类型是它的长度!从来没有这样做过!应该是这样的:
function replicate(times, number, output) {
if (output == undefined) output = [];
if (times < 0) {
return [];
} else if (times == 0) {
return output;
} else {
console.log(output, typeof output);
output.push(number);
return replicate(times - 1, number, output);
}
}
答案 1 :(得分:0)
Array.prototype.push()返回数组的新长度,而不是数组。因此,您将一个数字output
传递给您的函数,然后记录该函数。
push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度。
您可以使用concat()
return replicate(times - 1, number, output.concat(number));
代替,或先推送到数组
else {
output.push(number);
return replicate(times - 1, number, output);
}