JavaScript splice()不工作 for(var i=0;i

JavaScript splice()不工作 for(var i=0;i,javascript,Javascript,我有一个数组(this.phrases)。在另一节中,我将要删除的短语设置为等于null。第一个日志打印null,第二个日志也打印null。为什么没有拼接?这有时也是数组中的最后一项。您是否无法仅使用一个元素拼接阵列?但是,如果它不是this.phrases中的最后一项,也会发生同样的情况 编辑:s似乎也没有设置为任何值 编辑:我添加的两个长度日志打印相同的编号 编辑:事实并非如此。奇怪的事情发生在长度上,可能不涉及这段代码。我只想知道我是否正确使用了splice()。切换这两行: for(va

我有一个数组(
this.phrases
)。在另一节中,我将要删除的短语设置为等于null。第一个日志打印
null
,第二个日志也打印
null
。为什么没有拼接?这有时也是数组中的最后一项。您是否无法仅使用一个元素拼接阵列?但是,如果它不是
this.phrases
中的最后一项,也会发生同样的情况

编辑:
s
似乎也没有设置为任何值

编辑:我添加的两个长度日志打印相同的编号


编辑:事实并非如此。奇怪的事情发生在长度上,可能不涉及这段代码。我只想知道我是否正确使用了splice()。

切换这两行:

for(var i = 0; i < this.phrases.length; i++) {
    console.log('sort ' + this.phrases[i]);
    console.log('sort length' + this.phrases.length);
    if(this.phrases[i] == null) {
        var s = this.phrases.splice(i, 1);
        console.log('splice ' + this.phrases[i]);
        console.log('splice length ' + this.phrases.length);
    }
}
为此:

var s = this.phrases.splice(i,1);

console.log('splice ' + this.phrases[i]);

当使用
.splice()
删除一个元素时,数组的其余元素将下移一个索引,但
i
将继续递增,而不管这些移位如何。但似乎没有任何元素被拼接。数组前后的元素数相同。
长度
应该有所改变,但如果不调整
i
以对抗
i++
,循环可能不会删除每个
null
。vs。只要不需要
.splice()
的突变特性,也可以使用。简单地向后循环会更容易。(比拼接上带减量的增量更容易;显然,
filter
us总体上要简单得多。)注意方法名称中的
p
。是一个mutator方法。我不希望这样。短语等于拼接的内容,我希望它等于拼接后数组中剩余的内容。抱歉,我混淆了slice@JonathanLonowski谢谢。@michaelAdam拼接后,您需要保持在相同的第i个位置,因此您必须向后移动一个i单位,因为for将在之后增加它。假设您在下一次迭代中删除索引2处的元素,我将是3,但您在索引3处的元素现在位于索引2处。我不明白在这个确切的上下文中这是如何工作的,因为我只删除了一个元素,但这是有效的。
console.log('splice ' + this.phrases[i]);

this.phrases.splice(i, 1);

i--;
const indexOfValue = treeSelectDataTemp.findIndex((item: any) => item.value === deleteIndexId[d]);

 console.log("  ###########  deleted indexOfValue ", indexOfValue);
 if (indexOfValue !== -1) {
    treeSelectDataTemp.splice(indexOfValue, 1);
 }