在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 數(shù)組刪除迭代

數(shù)組刪除迭代

有個100長度的數(shù)組recieDetailList,我想刪除里面的空項,這樣寫為什么不對?

          recieDetailList.forEach((item,index)=>{
              if(!item.medicine){
                  
                  console.log("kong")
                  recieDetailList.splice(index,1)
                  console.log(recieDetailList)
              }
          })

刪完發(fā)現(xiàn)只有50條,為何沒刪除干凈

回答
編輯回答
執(zhí)念

recieDetailList=recieDetailList.filter((item,index)=>{

          return !item.medicine
      })
2017年11月12日 15:22
編輯回答
吃藕丑

沒對的原因是splice在刪除的同時,也改變了數(shù)組自身的長度。你下一個的index會往前跳一個,所以沒刪完。
你可以試著,倒序的遍歷
即:
for(i=arr.length;i>0;i--) 這樣

2017年8月15日 02:06
編輯回答
我不懂

首先說為什么,就是數(shù)組的實際下標(biāo)和forEach回調(diào)函數(shù)中的index發(fā)生了錯位
舉個例子,arr=[0,0,0,1,0,1],刪除掉其中所有為0的項,
如果代碼寫為:

arr.forEach((item, index) => {
    if(item === 0)
        arr.splice(index, 1)
})

那么返回的結(jié)果為arr=[0, 1, 1]
具體的原因是:
index=0,arr=[0,0,0,1,0,1],刪掉第0項,arr=[0,0,1,0,1];
index=1,arr=[0,0,1,0,1],刪掉第1項,arr=[0,1,0,1],從這一步就能看出來index=1的原義是刪掉原數(shù)組[0,0,0,1,0,1]中的下標(biāo)為1的0,但是由于原數(shù)組已經(jīng)被刪掉了第一個0,所以此時數(shù)組下標(biāo)為1的項是原數(shù)組中下標(biāo)為2的項,所以會漏掉一些本應(yīng)該刪掉的項。
不知道我說明白了嗎

2017年7月26日 04:45