登陆

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

admin 2019-07-18 231人围观 ,发现0个评论

最近在写IM,其间有的是比较本地聊天记录和线上聊天记录, 比较出不JS比较两个数组之间的不同同的即为未读的。

完成过程

其实比较起来也很简单:

1,咱们即将比较的两个数组拼接在一起,咱们能够运JS比较两个数组之间的不同用 concat, 数组的解构赋值或许push等都能够

  • concat: arr1.concat(arr2) -- 此办法不会改动原数组,回来新数组
  • 解构赋值:[...arr1, arr2] -- 此办法不会改动原数组,回来新数组
  • push: arr1.push(...arr2) -- 向数组arr1结尾增加元素,并回来新的长度(length)

从上面咱们能够得出第一种和第二种都是不错的挑选,可是因为concat一向有性能上的缺点,所以咱们挑选第二种是最合适不过的。

2,拼接完数组之后,咱们调用拼接生成的新数组调用 filter办法来找回两个数组之间的不同之处。

filter办法科普:

创立一个新的数组,新数组中的元素是经JS比较两个数组之间的不同过查看指定数组中契合条件的一切元素。

。。官方解说比较坑,大致便是说它首要创立了一个空数组,然后挑选callback的回来值,假如回JS比较两个数组之间的不同来值能够隐式转换成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
}

作用测验:

咱JS比较两个数组之间的不同们在filter办法循环体内部,比较每一个item的最开端索引值和它的最终索引值即可,假如他们之间是相同的,则阐明该元JS比较两个数组之间的不同素只要一个。那么它便是不同的。

eg:

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP