JS循环遍历并删除指定元素

4 篇文章 0 订阅

昨天一个朋友让我帮她修改的一段代码:

需求要每条数据轮播1分钟,然后删除,运行的时候会发现foreach循环中,删除一个之后,其他的就无法删除了。

【分析原因】

数据格式例如:['a','b','b','c'],需求是删除item为‘b’的元素

第一次循环:SysNotices数据:['a','b','b','c'],index为0,item:'a',不符合需求,

第二次循环:SysNotices数据:['a','b','b','c'],index为1,item:'b',执行splice(index,1),

第三次循环:SysNotices数据:['a','b','c'],index为2,item:'c',不符合需求,

到此数据中还有一个'b'删除不掉

使用splice删除数组元素会改变原始数组,这样会打乱foreach的index指向数组的下标

解决方法:

for

    for(var i=0,sign=true,len=that.data.SysNotices.length;i<len;sign ? i++ : i){
      if(that.data.SysNotices[i] && that.data.SysNotices[i].kind == 1){
        sign = false;
        setTimeout(() => {
          that.data.SysNotices.splice(i,1)
          that.setData({
            SysNotices: that.data.SysNotices,
            currentSwiper:0
          })
        }, 60000)
      }else{
        sign = true;
      }
    }

使用 sign 标记是否执行删除操作,删除元素则 i 保持不变,不执行删除时 i++ ,保证下一次循环时的指向的数组元素正确。

暂时写到此处,如有其他更好的方法再更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 假设你有一个 JavaScript 数组,并且想要倒序遍历它,并删除其中的特定值,你可以使用以下代码: ```javascript const arr = [1, 2, 3, 4, 5, 3]; const targetValue = 3; for (let i = arr.length - 1; i >= 0; i--) { if (arr[i] === targetValue) { arr.splice(i, 1); } } console.log(arr); // [1, 2, 4, 5] ``` 首先,我们定义了一个数组 `arr` 和一个变量 `targetValue`,用于存储要删除的值。 然后,我们使用一个 `for` 循环来倒序遍历数组 `arr`,并在每个循环中检查当前元素是否等于目标值。如果是,则使用 `splice` 方法从数组中删除元素。 最后,我们输出修改后的数组 `arr`,以检查删除操作是否成功。 注意,在这个实现中,我们使用了 `splice` 方法来删除数组中的元素。这种方法会改变原始数组,因此需要谨慎使用。如果你不想修改原始数组,可以考虑创建一个新的数组来存储删除后的结果。 ### 回答2: 在JavaScript中,可以使用`Array.prototype.reverse()`方法将数组进行倒序排列。然后,可以使用`Array.prototype.forEach()`方法遍历数组,找到并删除指定的值。 首先,假设我们有一个数组`arr`,要删除的值为`target`。 ```javascript let arr = [1, 2, 3, 4, 5, 5, 6]; let target = 5; arr.reverse(); // 将数组倒序 arr.forEach((value, index) => { if (value === target) { arr.splice(index, 1); // 通过splice方法删除指定值 } }); arr.reverse(); // 再次将数组倒序,恢复原始顺序 ``` 在上述代码中,首先我们将数组倒序排列,然后使用`forEach`方法遍历数组。在遍历过程中,如果当前值等于我们要删除的值,我们使用`splice`方法删除该值。最后,我们再次将数组倒序排列,以恢复原始的顺序。 请注意,直接在`forEach`循环中使用`splice`会导致数组长度改变,会导致遍历过程中出现跳过元素或者重复遍历元素的情况。为了解决这个问题,我们可以使用倒序遍历的方式。 ### 回答3: 要倒序遍历删除指定值,我们可以采用以下的Javascript代码: ```javascript let arr = [1, 2, 3, 4, 3, 5, 6]; // 假设数组中包含这些值 let target = 3; // 要删除的目标值 for (let i = arr.length - 1; i >= 0; i--) { // 从数组最后一个元素开始往前遍历 if (arr[i] === target) { // 如果当前元素等于目标值 arr.splice(i, 1); // 使用splice方法删除当前元素 } } console.log(arr); // 打印修改后的数组 ``` 在这段代码中,我们首先定义了一个包含了一些值的数组`arr`,然后定义了要删除的目标值`target`。然后,我们通过一个逆向的`for`循环遍历数组。 在每次循环中,我们检查当前元素是否等于目标值。如果是,我们使用`splice`方法从数组中删除当前元素。`splice`的第一个参数表示要删除元素的索引,第二个参数表示要删除元素数量。 最后,我们打印出修改后的数组,即不包含指定值的倒序遍历结果。 这样,我们通过倒序遍历删除指定值的方法得到了最终结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值