数组去重方法总结比较

let arr = [1,3,4,5,6,7,7,8,9,9,9,9,91,1,2,3,3,4,5,‘a’,‘ab’,‘a’,‘abc’,‘abc’]

方法一 es6 Set

let list1 = []
list1 = Array.from(new Set(arr))
console.log(‘methods1’, list1)

方法二 遍历循环 indexOf

let list2 = []
arr.map((cur) => {
if (list2.indexOf(cur) === -1) {
list2.push(cur)
}
})
console.log(‘mthods2’, list2)

方法三使用filter 和 includes

let list3 = []
list3 = arr.filter((cur) => {
return list3.includes(cur) ? ‘’ : list3.push(cur)
})
console.log(‘methods3’, list3)

如果使用的是稍微复杂数组 如何按名称去重?

let infoList = [
{name:‘张三’,value:123},
{name:‘张三’,value:1000},
{name:‘王二小’,value:123},
{name:‘李四’,value:123},
{name:‘麻五’,value:123},
{name:‘麻五’,value:199},
{name:‘张三’,value:123}
]

console.log(‘methods4’, Array.from(new Set(infoList)))

// es6 new Set 无效

let list4 = []
list4 = infoList.filter((cur) => {
return list4.includes(cur.name) ? ‘’ : list4.push(cur.name)
})
console.log(‘methods5’, list4)

//filter和includes生效

let list5 = []
infoList.map((cur) => {
if (list5.indexOf(cur.name) === -1) {
list5.push(cur)
}
})
console.log(‘methods6’, list5) //

indexOf 方法同样无效

引入reduce

let obj = {}
let list6 = []
list6 = infoList.reduce((cur,next) => {
obj[next.name] ? ‘’ : obj[next.name] = true && cur.push(next)
return cur
}, [])
console.log(‘methods7’, list6)

上述代码执行效果如下:

methods1 [ 1, 3, 4, 5, 6, 7, 8, 9, 91, 2, 'a', 'ab', 'abc' ]
mthods2 [ 1, 3, 4, 5, 6, 7, 8, 9, 91, 2, 'a', 'ab', 'abc' ]
methods3 [ 1, 3, 4, 5, 6, 7, 8, 9, 91, 2, 'a', 'ab', 'abc' ]
methods4 [ { name: '张三', value: 123 },
  { name: '张三', value: 1000 },
  { name: '王二小', value: 123 },
  { name: '李四', value: 123 },
  { name: '麻五', value: 123 },
  { name: '麻五', value: 199 },
  { name: '张三', value: 123 } ]
methods5 [ { name: '张三', value: 123 },
  { name: '王二小', value: 123 },
  { name: '李四', value: 123 },
  { name: '麻五', value: 123 } ]
methods6 [ { name: '张三', value: 123 },
  { name: '张三', value: 1000 },
  { name: '王二小', value: 123 },
  { name: '李四', value: 123 },
  { name: '麻五', value: 123 },
  { name: '麻五', value: 199 },
  { name: '张三', value: 123 } ]
methods7 [ { name: '张三', value: 123 },
  { name: '王二小', value: 123 },
  { name: '李四', value: 123 },
  { name: '麻五', value: 123 } ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值