让前端飞Web前端之路

js数组方法——找出两数组中不相同的元素的集合

2020-07-09  本文已影响0人  裸泳的小熊

1. 找出两数组中不相同的元素的集合

平时需求中经常遇到,找出两数组中不相同的部分。有时候会要找出被删除的元素。

//比如
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是找出数组中元素第一次出现的位置。
lastIndexOf是找出数组中元素最后出现的位置。
假如两个数组合并后,重复的元素出现两次,indexOf和lastIndexOf的值是不一样的,反之,如果元素不是重复元素,那么,indexof和lastIndexOf值是一样的。

2.reduce运用场景

reduce()方法为归并类方法,最常见的应用场景就是,计算数组中每一项的总和。

reduce()方法会遍历数组的每一项,它接收两个参数:
第一个参数是:每次遍历都会调用的函数,而这个函数又接收四个参数,分别为:前一个值、当前项、项目的索引和数组对象,
而这个函数的返回值,会传给下一次遍历时,执行的这个方法的第一个参数。

第二个参数是:归并基础的初始值。

 arr.reduce((prev,cur)=>{
      return prev+cur
 })

上面这段代码,是用来计算数组总和的,reduce方法中,只传了第一个参数,也就是只传了一个函数,但第二个参数、初始值并没有传,当第二个值没有传的时候,第一次循环,prev的值,默认为数组的第一项,而cur的值为数组的第二项,也就是第一次循环,会return 1+2 ,这个时候,第一次循环返回的结果会传给下一次循环中方法的第一个参数,也就是说、第二次循环方法中prev的值,是第一次循环方法返回的结果。

arr.reduce((prev,cur)=>{
    return prev+cur
},10)

我们传入一下第二个参数,第一次循环,prev的值为reduce的第二个参数,也就是“归并基础的初始值”,而cur的值为数组的第一项,第一次循环会返回10+1 。

总结:
1.当reduce()方法的第二个值为空时,第一次循环方法中的第一个参数(prev)为数组的第一项值,第二个参数(cur)为数组的第二项值,反之,第一次循环方法中的第一个参数(prev)为reduce的第二个参数值,第二个参数(cur)为数组的第一项值。

2.reduce方法的第一个参数,就是每次遍历都会执行的匿名函数,当前函数的返回值会传给下一次执行函数的第一个值。也就是prev

上一篇下一篇

猜你喜欢

热点阅读