Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-在递归过程中,变量的类型从对象变为数字_Javascript_Arrays_Recursion - Fatal编程技术网

JavaScript-在递归过程中,变量的类型从对象变为数字

JavaScript-在递归过程中,变量的类型从对象变为数字,javascript,arrays,recursion,Javascript,Arrays,Recursion,我有一个函数,它将数字“number”按给定的次数推送到“output”数组。由于某种原因,在递归调用函数期间,“输出”数组变成了一个数字,因此push方法停止工作。有人能给我解释一下为什么“输出”变量的类型在递归过程中会发生变化吗 function replicate(times, number, output) { if (output == undefined) output = []; if (times < 0) { return []; } else if

我有一个函数,它将数字“number”按给定的次数推送到“output”数组。由于某种原因,在递归调用函数期间,“输出”数组变成了一个数字,因此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);
    return replicate(times - 1, number, output.push(number));
  }
}

//logs
//[] 'object'
//1 'number'
函数复制(次数、数量、输出){
如果(输出==未定义)输出=[];
如果(次数<0){
返回[];
}否则如果(次数==0){
返回输出;
}否则{
console.log(输出、输出类型);
返回复制(times-1,number,output.push(number));
}
}
//日志
//[]对象
//1‘数字’
“注意”

返回数组的新长度,而不是数组。因此,您正在将一个数字作为
output
传递给您的函数,然后将其记录下来

方法将一个或多个元素添加到数组的末尾,并返回数组的新长度

您可以使用
concat()

而是,或者先推到阵列

else {
    output.push(number);
    return replicate(times - 1, number, output);
}

这是因为数组上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);
  }
}
函数复制(次数、数量、输出){
如果(输出==未定义)输出=[];
如果(次数<0){
返回[];
}否则如果(次数==0){
返回输出;
}否则{
console.log(输出、输出类型);
输出。推送(数字);
返回复制(次数-1,数字,输出);
}
}
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);
  }
}