gpt4 book ai didi

javascript - 拼接未从数组中删除元素

转载 作者:行者123 更新时间:2023-12-03 07:16:51 24 4
gpt4 key购买 nike

我正在使用splice从数组中删除一个元素,但是它不起作用。
据我所知,代码看起来还不错,但也许我正在丢失/监视某些内容。
请看一下。这里的“状态”是一个包含对象的数组。

 let removeFromState = state;
for(var i=0;i<removeFromState.length;i++){
if(removeFromState[i].index===action.index){
removeFromState.splice[i,1];
}
}
return removeFromState;

我不敢相信,我是如此愚蠢。
我已经看了好一阵子,但没看到它在我眼前。但我很高兴将其发布在这里,因为有关于丢失条目的评论,因为即使删除条目,我也增加了“i”。

最佳答案

有两个问题:

  • 一个错字,您使用的是[i,1](方括号),而您应该使用(i,1)(括号)。方括号是属性访问器。 (这不是语法错误的原因是JavaScript具有逗号运算符,并且[i,1]的计算结果为[1]。不是运行时错误的原因是functionname[1]在函数上查找了属性"1"-然后忽略了它找到的任何值。)
  • 您的循环将在删除条目后跳过条目,因为您既删除了条目又增加了i。因此,当您删除条目#5时,条目#6变为#5-但随后您转到i == 6。因此,您永远都不会看到新的条目#5。

  • 要解决#2,请仅在不删除条目的情况下增加 i,或向后循环。

    所以:
    var i = 0;
    while (i < removeFromState.length) {
    if(removeFromState[i].index === action.index) {
    removeFromState.splice(i, 1);
    } else {
    ++i;
    }
    }

    要么
    for (var i = removeFromState.length - 1; i >= 0; --i) {
    if(removeFromState[i].index === action.index) {
    removeFromState.splice(i, 1);
    }
    }

    或者,创建一个仅包含要保留的条目的新数组:
    var newArray = removeFromState.filter(function(entry) { return entry.index !== action.index; });

    关于javascript - 拼接未从数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49021164/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com