首页 > 解决方案 > 使用 Array.prototype.filter() 不会对数组数组进行重复数据删除

问题描述

我有以下数据正在尝试重复数据删除:

实际的

var data = [
  ['dupeValue', { data: 123 }],
  ['dupeValue', { data: 123 }],
  ['otherValue', { data: 1111111 }],
  ['dupeValue', { data: 123 }]
]

预期的

var data = [
  ['dupeValue', { data: 123 }],
  ['otherValue', { data: 1111111 }]
]

我尝试了以下方法,但不起作用:

data.filter((value, i, arr) => {
  return value[0] !== arr[i][0]
})
// outputs []

我错过了什么?

var data = [
  ['dupeValue', { data: 123 }],
  ['dupeValue', { data: 123 }],
  ['otherValue', { data: 1111111 }],
  ['dupeValue', { data: 123 }]
]

var result = data.filter((value, i, arr) => {
  return value[0] !== arr[i][0]
})

console.log(result)

标签: javascriptarrays

解决方案


您可以使用 areduce()映射到对象并Object.values()获取结果数组

var data = [
  ['dupeValue', { data: 123 }],
  ['dupeValue', { data: 123 }],
  ['otherValue', { data: 1111111 }],
  ['dupeValue', { data: 123 }]
]

var result = Object.values(data.reduce((a, c) => (a[c[0]] = c, a), {}))
 

console.log(result)


推荐阅读