電子商務(wù)網(wǎng)站建設(shè)的實(shí)訓(xùn)報(bào)告網(wǎng)絡(luò)營銷企業(yè)案例分析
就是很多時(shí)候我們對一個(gè)數(shù)組進(jìn)行操作的時(shí)候,在for遍歷的過程中刪掉了一個(gè)元素,那么在刪掉那個(gè)元素之后的所有元素的索引值都會(huì)減少一位,數(shù)組長度縮短一位,刪完之后,正在進(jìn)行的循環(huán)會(huì)繼續(xù)循環(huán)下去,但是循環(huán)的索引不變,就會(huì)導(dǎo)致被刪元素緊鄰的后面那個(gè)元素跳過了循環(huán)檢查。代碼解釋如下:
var arr=[1,2,3,3,4,5,6];
for(let i=0,len=arr.length;i<len;i++){
if(arr[i]===3){
arr.splice(i,1);
console.log(“抓到一個(gè)3”);
}
}
這個(gè)程序的意思就是在數(shù)組arr找出3來并把它刪除,但是結(jié)果只打印了一次“抓到一個(gè)3”,就是說它只找到一個(gè),而另外一個(gè)去哪了?請聽下面分享。
循環(huán)從第一位開始檢,找到3之后立馬打印“抓到一個(gè)3”,此時(shí)的索引是2
[1,2,3 1,3 2,4,5,6]
而它后面那個(gè)3因?yàn)榍懊鎰h掉一個(gè),會(huì)往左挪一位,從索引3變成索引2了,而循環(huán)繼續(xù)檢查是從索引3開始,即對應(yīng)數(shù)組中的4,直到結(jié)束。
[1,2,3 2,4,5,6]
所以第二個(gè)3是被漏掉了。
怎么解決這種問題呢?最好的辦法是逆向循環(huán)(從數(shù)組的最后一位開始檢查,直到數(shù)組的頭部):
var arr=[1,2,3,3,4,5,6];
for(let len=arr.length,i=len-1;i>0;i–){
if(arr[i]===3){
arr.splice(i,1);
console.log(“抓到一個(gè)3”);
}
}
這樣就可以打印出兩次"抓到一個(gè)3"。如果你一味地想怎么把循環(huán)中的索引往回扳一位,這就顯得非常復(fù)雜了。有時(shí)候逆向思維真的很好用。