JS比较两个数组之间的不同

最近在写IM,其中有的是比较本地聊天记录和线上聊天记录, 比较出不同的即为未读的。

实现步骤

其实比较起来也很简单:

1,我们将要比较的两个数组拼接在一起,大家可以使用 concat, 数组的解构赋值或者push等都可以

  • concat: arr1.concat(arr2) -- 此方法不会改变原数组,返回新数组
  • 解构赋值:[...arr1, arr2] -- 此方法不会改变原数组,返回新数组
  • push: arr1.push(...arr2) -- 向数组arr1末尾添加元素,并返回新的长度(length)

从上面我们可以得出第一种和第二种都是不错的选择,但是由于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:

数组   两个   JS
发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();