js数组去重、数据和对象去重

数组去重网上的方法有很多种,我这里整理了几个是按最高效率进行排序的。
先创建两个数组:

   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)
    }
  }
 

以后就是数据去重的方法,有兴趣的同学可以一起进行研究一下

发布了53 篇原创文章 · 获赞 59 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42268364/article/details/102914203