Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 Can';我不知道如何在增量函数中加一个零_Javascript_Arrays_Recursion - Fatal编程技术网

Javascript Can';我不知道如何在增量函数中加一个零

Javascript Can';我不知道如何在增量函数中加一个零,javascript,arrays,recursion,Javascript,Arrays,Recursion,因此,我有一个函数,它接受一个数字数组(例如,[7,4,5]),该函数应该将其递增一(因此,[7,4,6])。我已经建立了功能,它的工作!但我无法理解这种情况:[1,9,9,9]应该变成[2,0,0],但它只是[2] 我已经提供了下面的函数。任何建议都会非常有用。我确实做过递归,但这似乎是个好主意 function increment(arr){ let num = arr.pop(); if(num === 9){ increment(arr); } else {

因此,我有一个函数,它接受一个数字数组(例如,
[7,4,5]
),该函数应该将其递增一(因此,
[7,4,6]
)。我已经建立了功能,它的工作!但我无法理解这种情况:
[1,9,9,9]
应该变成
[2,0,0]
,但它只是
[2]

我已经提供了下面的函数。任何建议都会非常有用。我确实做过递归,但这似乎是个好主意

function increment(arr){
  let num = arr.pop();
  if(num === 9){
    increment(arr);
  } else {
    arr.push(num + 1);
      console.log(arr);    
  }
}

如何将数组元素连接在一起,然后解析int并添加1,然后将其转换为字符串,并将数字拆分为数组

var arr = [1,9,9];
numberString = arr.join('');
numberToIncrement = parseInt(numberString)+1;
arr = String(numberToIncrement).split('');
console.log(arr) // [2,0,0]

您可以加入数组值,然后按如下方式将其拆分:

函数增量(arr){
设num=Number(arr.join(“”);
返回字符串(num+1).split(“”).map(Number);
}

log(增量([1,9,9,9])首先将数组转换为
数字
将其递增1,然后将其转换回
数组
var-arr=[9,9,9];
函数增量(){
var anum=Number(arr.join(“”);//将arr转换为Number
anum++;//递增数字
var newArr=anum.toString().split(“”)
警报(newArr);//最终新数组
}
增量()您可以使用并保存提货以便取消提货

它适用于任何大小的阵列

function inc(数组){
var carry=array.reduceRight(函数(r,a,i,aa){
var v=a+r;
aa[i]=v%10;
返回数学楼层(v/10);
}, 1);
进位和数组。取消移位(进位);
返回数组;
}
log(inc([7,4,5]);
log(inc([1,9,9,9]);
log(inc([9,9,9,9,9])

.as console wrapper{max height:100%!important;top:0;}
在递增9之后,您忘记了追加0

函数增量(arr){
如果(!arr | |!arr.length)返回[1];
设num=arr.pop();
如果(num==9){
设newArr=增量(arr)
新到达推力(0);
返回newArr;
}否则{
arr.push(num+1);
}
返回arr;
}
console.log(增量([0]));
日志(增量([1,9,9]);

log(增量([9,9,9,9])虽然到目前为止给出的答案是正确的,但它们的运行时间与输入元素的数量呈线性关系=O(n)。以下溶液平均以恒定时间=O(1)运行:

//增量数组:
功能增量(arr){
让进位=1;
for(设i=arr.length-1;i>=0&&carry>0;--i){
arr[i]+=进位;
进位=数学楼层(arr[i]/10);
arr[i]=10;
}
while(进位>0){
到达取消移位(进位%10);
进位=数学楼层(进位/10);
}
返回arr;
}
//例如:

log(增量([9,9])它在
[9,9,9]
中应该如何运行?[9,9,9]应该变成[1,0,0,0]。噢,我完全忽略了这一点。哈嗯……问题是它返回字符串而不是int。这意味着如果不将其转换回来,您将无法再次使用它。与@Brian McCall的问题相同,thi返回字符串而不是int。这意味着如果不将其转换回来,您将无法再次使用它。
console.log(newArr.map(Number))数组
@jdmdevdotnet好吧,函数本身实际上是返回未定义的-但是,即使不是,也没关系,因为
Number(arr.join(“”)
将强制它返回一个数字,无论数组中的值是字符串还是ints@Rayon我不确定是否返回新数组,因为OP在原始代码中没有返回任何内容。不过,我要补充一点,从函数的角度来看,它是有意义的。你能解释一下reduceRight:)它和reduce一样,但它是从右边开始的。索引从
array.length-1
变为零。