最近在写IM,其中有的是比较本地聊天记录和线上聊天记录, 比较出不同的即为未读的。
其实比较起来也很简单:
1,我们将要比较的两个数组拼接在一起,大家可以使用 concat, 数组的解构赋值或者push等都可以。
从上面我们可以得出第一种和第二种都是不错的选择,但是由于concat一直有性能上的缺陷,所以我们选择第二种是最合适不过的。
2,拼接完数组之后,我们调用拼接生成的新数组调用 filter方法来找回两个数组之间的不同之处。
filter方法科普:
创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
。。官方解释比较坑,大致就是说它首先创建了一个空数组,然后筛选callback的返回值,如果返回值可以隐式转换成true,则将对应的元素push到那个空数组中!
它内部的回调函数可以传入三个参数(同forEach完全一样)
item为必填参数,表示当前元素
index为可选参数,表示当前元素的索引
arr同样为可选参数,表示当前元素所属的数组对象(正在遍历的这个数组)。
不同于forEach,它是有返回值的,找个变量接收即可:

filter源码实现:
Array.prototype.myFilter = function(callback) {
let newArr = []
for (let i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
newArr.push(this[i])
}
}
return newArr
}

效果测试:

我们在filter方法循环体内部,比较每一个item的最开始索引值和它的最后索引值即可,如果他们之间是相同的,则说明该元素只有一个。那么它就是不同的。
eg:
| 留言与评论(共有 0 条评论) |