Javascript 为什么这个问题中的for循环是递减的,而for循环是递增的;T

Javascript 为什么这个问题中的for循环是递减的,而for循环是递增的;T,javascript,arrays,Javascript,Arrays,我正在做一个leetCode练习,我不知道为什么减少for循环会起作用,但是增加for循环的代码却不起作用。有人能解释一下原因吗?。这就是问题所在: 给定一个数组nums和一个值val,在适当位置删除该值的所有实例并返回新的长度 不要为另一个数组分配额外的空间,必须通过使用O(1)个额外内存修改输入数组来完成此操作 元素的顺序可以更改。你在新的长度之外留下什么并不重要 //不起作用 var removeElement = function(nums, val) { for(let i =

我正在做一个leetCode练习,我不知道为什么减少for循环会起作用,但是增加for循环的代码却不起作用。有人能解释一下原因吗?。这就是问题所在:

给定一个数组nums和一个值val,在适当位置删除该值的所有实例并返回新的长度

不要为另一个数组分配额外的空间,必须通过使用O(1)个额外内存修改输入数组来完成此操作

元素的顺序可以更改。你在新的长度之外留下什么并不重要

//不起作用

var removeElement = function(nums, val) {
    for(let i = nums.length -1; i >= 0; i--){
        if(val == nums[i]) {
         nums.splice(i, 1);
        }
    }
  return nums.length;
};
//工作

var removeElement = function(nums, val) {
    for (let i = nums.length - 1; i >= 0; i--){
        if (nums[i] == val){
            nums.splice(i, 1);
        }
    }
    return nums.length;
};

这是一个众所周知的“原地”改变数组的问题,而向后工作是标准的解决方法

无论何时删除当前元素,都会从该点向前修改任何元素的索引

特别是,如果您正在向前工作,那么在移除元件
i
时,您需要在下一个过程中重新考虑该元件,因为拼接之前的元件
i+1
现在是元件
i
,因此您必须跳过增量:

const removeElement = function(nums, val) {
    for (let i = 0; i < nums.length; ) {
        if (val === nums[i]) {
            nums.splice(i, 1);
        } else {
            ++i;
        }
    }
    return nums.length;
};
const removelement=函数(nums,val){
对于(设i=0;i

向后操作可以避免这个问题,因为您已经看到了这些(现在重新编号)元素。

这是一个众所周知的“原地”改变数组的问题,向后操作是标准的解决方法

无论何时删除当前元素,都会从该点向前修改任何元素的索引

特别是,如果您正在向前工作,那么在移除元件
i
时,您需要在下一个过程中重新考虑该元件,因为拼接之前的元件
i+1
现在是元件
i
,因此您必须跳过增量:

const removeElement = function(nums, val) {
    for (let i = 0; i < nums.length; ) {
        if (val === nums[i]) {
            nums.splice(i, 1);
        } else {
            ++i;
        }
    }
    return nums.length;
};
const removelement=函数(nums,val){
对于(设i=0;i

向后工作可以避免问题,因为您已经看到了这些(现在重新编号)元素。

示例中没有区别,似乎递增应该在第一个元素中。@KirillLiubun是的,OP的“不工作”版本的代码示例似乎不正确。您有一个数组
[1,2,3,4]
。删除
1
i=0
)。您的数组现在是
[2,3,4]
,但您的
i
位于
1
,而不是
0
。您的示例中没有区别,似乎递增应该在第一个示例中。@KirillLiubun是的,OP的“不工作”版本似乎有错误的代码示例。您有一个数组
[1,2,3,4]
。删除
1
i=0
)。您的数组现在是
[2,3,4]
,但您的
i
位于
1
,而不是
0
。对,这很有意义。非常感谢你!对,这是有道理的。非常感谢你!