1. 找出兩數(shù)組中不相同的元素的集合
平時(shí)需求中經(jīng)常遇到翁授,找出兩數(shù)組中不相同的部分。有時(shí)候會(huì)要找出被刪除的元素枢希。
//比如
let arr1 = [1,2,3,4];
let arr2 = [2,3,4];
//找出被刪的元素
function findItem(curArr,oldArr){
return curArr.concat(oldArr).filter(function(v, i, arr) {
return arr.indexOf(v) === arr.lastIndexOf(v);
});
}
console.log(findItem(arr1,arr2))
//打印 [1]
indexOf是找出數(shù)組中元素第一次出現(xiàn)的位置泳秀。
lastIndexOf是找出數(shù)組中元素最后出現(xiàn)的位置标沪。
假如兩個(gè)數(shù)組合并后,重復(fù)的元素出現(xiàn)兩次嗜傅,indexOf和lastIndexOf的值是不一樣的金句,反之,如果元素不是重復(fù)元素吕嘀,那么违寞,indexof和lastIndexOf值是一樣的。
2.reduce運(yùn)用場(chǎng)景
reduce()方法為歸并類方法偶房,最常見的應(yīng)用場(chǎng)景就是趁曼,計(jì)算數(shù)組中每一項(xiàng)的總和。
reduce()方法會(huì)遍歷數(shù)組的每一項(xiàng)棕洋,它接收兩個(gè)參數(shù):
第一個(gè)參數(shù)是:每次遍歷都會(huì)調(diào)用的函數(shù)挡闰,而這個(gè)函數(shù)又接收四個(gè)參數(shù),分別為:前一個(gè)值掰盘、當(dāng)前項(xiàng)摄悯、項(xiàng)目的索引和數(shù)組對(duì)象,
而這個(gè)函數(shù)的返回值愧捕,會(huì)傳給下一次遍歷時(shí)奢驯,執(zhí)行的這個(gè)方法的第一個(gè)參數(shù)。
第二個(gè)參數(shù)是:歸并基礎(chǔ)的初始值晃财。
arr.reduce((prev,cur)=>{
return prev+cur
})
上面這段代碼叨橱,是用來計(jì)算數(shù)組總和的,reduce方法中断盛,只傳了第一個(gè)參數(shù)罗洗,也就是只傳了一個(gè)函數(shù),但第二個(gè)參數(shù)钢猛、初始值并沒有傳伙菜,當(dāng)?shù)诙€(gè)值沒有傳的時(shí)候,第一次循環(huán)命迈,prev的值贩绕,默認(rèn)為數(shù)組的第一項(xiàng),而cur的值為數(shù)組的第二項(xiàng)壶愤,也就是第一次循環(huán)淑倾,會(huì)return 1+2 ,這個(gè)時(shí)候征椒,第一次循環(huán)返回的結(jié)果會(huì)傳給下一次循環(huán)中方法的第一個(gè)參數(shù)娇哆,也就是說、第二次循環(huán)方法中prev的值,是第一次循環(huán)方法返回的結(jié)果碍讨。
arr.reduce((prev,cur)=>{
return prev+cur
},10)
我們傳入一下第二個(gè)參數(shù)治力,第一次循環(huán),prev的值為reduce的第二個(gè)參數(shù)勃黍,也就是“歸并基礎(chǔ)的初始值”宵统,而cur的值為數(shù)組的第一項(xiàng),第一次循環(huán)會(huì)返回10+1 覆获。
總結(jié):
1.當(dāng)reduce()方法的第二個(gè)值為空時(shí),第一次循環(huán)方法中的第一個(gè)參數(shù)(prev)為數(shù)組的第一項(xiàng)值锻梳,第二個(gè)參數(shù)(cur)為數(shù)組的第二項(xiàng)值箭券,反之,第一次循環(huán)方法中的第一個(gè)參數(shù)(prev)為reduce的第二個(gè)參數(shù)值疑枯,第二個(gè)參數(shù)(cur)為數(shù)組的第一項(xiàng)值辩块。
2.reduce方法的第一個(gè)參數(shù),就是每次遍歷都會(huì)執(zhí)行的匿名函數(shù)荆永,當(dāng)前函數(shù)的返回值會(huì)傳給下一次執(zhí)行函數(shù)的第一個(gè)值废亭。也就是prev