鍍金池/ 問(wèn)答/HTML/ 微信小程序中數(shù)組中item的刪除

微信小程序中數(shù)組中item的刪除

做小程序購(gòu)物車(chē)時(shí),想讓被選中的 ‘項(xiàng)’ 能在數(shù)組中刪除,然后使用 carts.splice(i, 1); 方法,就炸了
圖片描述

/**
 * 刪除購(gòu)物車(chē)當(dāng)前商品
 */
  // 先遍歷 carts 里面的item是否選中,然后根據(jù)選中的狀態(tài) 刪除item。
  deleteList: function (e) {
    const index = e.currentTarget.dataset.index; //得到index的值
    let carts = this.data.carts;
    const id = e.currentTarget.id

    for (let i = 0; i < carts.length; i++) {
      // 如果item是選中的話,就刪除它。
      if (carts[i].selected == true) {
        carts.splice(i, 1); //刪除index 中的一個(gè) 然后返回?cái)?shù)組 
        console.log(i + "---i");
        console.log(carts.length + "---carts.length");
      }
    }
    this.setData({
      carts: carts,
    });
    
    if (!carts.length) {  //如果carts為空 false 的時(shí)候
      this.setData({
        hasList: false
      });
    } else {
      this.getTotalPrice();
    }
  },

因?yàn)槭莊or循環(huán) carts.length; 然后 carts.splice(i, 1); 會(huì)讓length的長(zhǎng)度-1,就會(huì)出現(xiàn)循環(huán)有幾個(gè)未執(zhí)行的情況,圖片描述

,把length的長(zhǎng)度固定住,又會(huì)出現(xiàn) Cannot read property 'selected' of undefined,求好心大佬幫忙解惑啊。。。。,小弟不勝感激~~

回答
編輯回答
薄荷綠

在for循環(huán)中不要改變你循環(huán)對(duì)象的長(zhǎng)度

兩個(gè)即將方案

  1. 創(chuàng)建一個(gè)新數(shù)組,把不刪除的元素push到新數(shù)組中
  2. 返過(guò)來(lái)循環(huán) 把for (let i = 0; i < carts.length; i++) 改成 `for (let i =
    carts.length-1; i >=0; i--)`
2017年4月7日 03:12