我的代码是否有任何泄漏,只有 1 个案例不起作用我不知道为什么?

问题描述 投票:0回答:1

我正在尝试编写一个程序来移动数组末尾的所有零并保留其他元素的原始顺序。

这是我的代码:-

var moveZeros = function (arr) {

  // TODO: Program me

var k=0;
  for (var i=0;i<=arr.length-1;i++){
    
    var s=arr[i];
    if (s===0){
      
      arr.splice(i,1);
      k++
      
      }
    }
for (var j=0;j<=k-1;j++){


    arr.push(0);


    }

  return arr

  }

但是当零像 [1,0,0,1] 一样彼此相邻时,它就不起作用了。

我不明白为什么。

有人能告诉吗?

还请解释一下为什么 k-1 不是 k 我通过观察输出写了 k-1 。 请不要告诉原始问题的答案,我只想用我的代码解决问题。 :)

javascript arrays debugging
1个回答
1
投票

问题在于,在每个循环中,您都将

i
变量加一。意思是,您将转到下一个索引。但是,如果行中有 2 个或多个零,并且删除了第一个零,则不应将
i
更改为
i + 1
,因为
i
已经指向数组中的新值(为零)

var moveZeros = function (arr) {
  // TODO: Program me

  var k = 0;
  for (var i = 0; i <= arr.length - 1;) {
    var s = arr[i];
    if (s === 0) {
      arr.splice(i, 1);
      k++;
    } else {
      i++;
    }
  }
  for (var j = 0; j <= k - 1; j++) {
    arr.push(0);
  }

  return arr;
};

console.log(moveZeros([1,0,0,2]));

© www.soinside.com 2019 - 2024. All rights reserved.