js数组去重,数组里面有对象去重

一、普通数组去重

  1. Set方法

// 1. Set
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = [...new Set(arr)]
console.log(uniqueArr)

输出结果:


  1. filter + indexOf

// 2. filter + indexOf
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index)
console.log(uniqueArr)

输出结果:


  1. reduce

// 3. reduce
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], [])
console.log(uniqueArr)

输出结果:


  1. Map

// 4. Map
let arr = [1, 2, 3, 3, 4, 4, 5]
let map = new Map()
let uniqueArr = []
for (let i = 0; i < arr.length; i++) {
  if (!map.has(arr[i])) {
    map.set(arr[i], true)
    uniqueArr.push(arr[i])
  }
}
console.log(uniqueArr)

输出结果:


  1. Object

// 5. Object
let arr = [1, 2, 3, 3, 4, 4, 5]
let obj = {}
let uniqueArr = []
for (let i = 0; i < arr.length; i++) {
  if (!obj[arr[i]]) {
    obj[arr[i]] = true
    uniqueArr.push(arr[i])
  }
}
console.log(uniqueArr)

输出结果:


6. ES6 includes + forEach

// 6. ES6 includes + forEach
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = []
arr.forEach(item => {
  if (!uniqueArr.includes(item)) {
    uniqueArr.push(item)
  }
})

输出结果:


7. ES6 from + Set

// 7. ES6 from + Set
let arr = [1, 2, 3, 3, 4, 4, 5]
let uniqueArr = Array.from(new Set(arr))
console.log(uniqueArr)

输出结果:



8.使用双重for+splice对数组去重

这个方式改变原数组

function removeDuplicates (arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        arr.splice(j, 1)
        j--
      }
    }
  }
  console.log(arr)
}

removeDuplicates([1, 2, 2, 3, 3, 1, 5, 2, 4])

输出结果:


9.使用双重for+push对数组去重

这种方式不会改变原数组

function removeDuplicates (arr) {
  let result = []
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        j = ++i
      }
    }
    result.push(arr[i])
  }
  console.log(result)
}
removeDuplicates([1, 2, 2, 3, 3, 1, 5, 2, 4])

输出结果:



二、对象数组去重

1.数组里面的对象只有一个参数,如何去重?

let arr = [{ name: 'zs' }, { name: 'ls' }, { name: 'zs' }, { name: 'ww' }]
let arr = [{ name: 'zs' }, { name: 'ls' }, { name: 'zs' }, { name: 'ww' }]
for (let i = 0; i < arr.length; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i].name === arr[j].name) {
      arr.splice(j, 1)
      j--
    }
  }
}
console.log(arr)

还是for循环比较实用

使用splice会改变原数组

输出结果:


2.使用双重for+push,对象数组去重。

let arr = [{ name: 'zs' }, { name: 'ls' }, { name: 'zs' }, { name: 'ww' }]
let result = []
for (let i = 0; i < arr.length; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i].name === arr[j].name) {
      j = ++i
    }
  }
  result.push(arr[i])
}
console.log(result)

输出结果:

这个不会改变原数组


3.现在有一个需求:一个数组对象里的每一项有name,age两个键,另一项的name,age的值相同的话,只保留一项。

let arr = [{ name: 'zs', age: 18 }, { name: 'ls', age: 19 }, { name: 'zs', age: 20 }, { name: 'zs', age: 18 }]

例如第一项跟第四项的name,age的值都一样,就只保留一个。

这种方式不会改变原数组。


4.使用双重for+splice

let arr = [{ name: 'zs', age: 18 }, { name: 'ls', age: 19 }, { name: 'zs', age: 20 }, { name: 'zs', age: 18 }]
for (let i = 0; i < arr.length; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i].name === arr[j].name && arr[i].age === arr[j].age) {
      arr.splice(j, 1)
      j--
    }
  }
}
console.log(arr)

这种方式会改变原数组。

输出结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值