数组去重网上的方法有很多种,我这里整理了几个是按最高效率进行排序的。
先创建两个数组:
data () {
return {
playlist: ['1', '2', '3', '4', '5', '6'],
list: ['1', '2', '3', '4']
}
}
提示一下,里面两个数组里面有字符串、数字要去重的话,可以全部转换为字符串或者数字再进行去重,arr.map(String)或者arr.map(Number)
效率第一:for…of + Object
首先创建一个空对象,然后用 for 循环遍历
利用对象的属性不会重复这一特性,校验数组元素是否重复
distinct () {
let arr = []
arr = this.a.concat(this.b)
// arr = arr.map(Number)
let result = []
let obj = {}
for (let i of arr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1
}
}
return result
},
}
效率第二:new Set()
ES6 新增了 Set 这一数据结构,类似于数组,但 Set 的成员具有唯一性
基于这一特性,就非常适合用来做数组去重了
distinct () {
let arr = []
/* Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。 */
arr = Array.from(new Set([...this.a, ...this.b]))
return arr
},
效率第三:Array.sort()
首先使用 sort() 将数组进行排序,然后比较相邻元素是否相等,从而排除重复项
arr.map(String)
distinct () {
let arr = this.a.concat(this.b)
// arr = arr.map(Number)
arr = arr.sort()
let result = [arr[0]]
for (let i = 1; i < arr.length; i++) {
arr[i] !== arr[i - 1] && result.push(arr[i])
}
return result
}
有时候会遇到一些比较复杂的情况,比如说一个是数组,一个是对象,数组里面还包含对象,那么这个要怎么去重呢,这里提供的方法如下:
data () {
return {
playlist: [{ id: 1, name: 'a' }, { id: 2, name: 'a' }, { id: 3, name: 'a' }, { id: 4, name: 'a' }, { id: 5, name: 'a' }],
list: {
data: [{ id: 1, name: 'a' }, { id: 2, name: 'a' }, { id: 3, name: 'a' }, { id: 4, name: 'a' }]
}
}
},
methods:{
distinct() {
const newData = []
const playlist = this.playlist
let list = this.list
for (let i = 0; i < playlist.length; i++) {
let flag = true
for (let j = 0; j < list.data.length; j++) {
if (playlist[i].id === list.data[j].id) {
flag = false
break
}
}
if (flag) {
newData.push(playlist[i]) // 这里的newData push的是去重比较之后得出的数据
}
}
list = list.data.concat(newData)
}
}
以后就是数据去重的方法,有兴趣的同学可以一起进行研究一下