【问题标题】:find repeated values in an array of objects [duplicate]在对象数组中查找重复值[重复]
【发布时间】:2021-02-04 18:17:15
【问题描述】:

我需要在这样的数组中找到重复的值:

let arr = [
     {date:"20/7/2020", state:"walking",duration:"20"},
     {date:"21/7/2020", state:"driving",duration:"13"},
     {date:"20/7/2020", state:"walking",duration:"39"},
     {date:"21/7/2020", state:"driving",duration:"76"},
]

我需要将满足该相等性的所有对象之间的相等日期和状态作为参考,然后将它们的持续时间相加并将它们推送到一个数组中,但我找不到方法

【问题讨论】:

  • 排序和迭代或填充哈希表
  • This thread 有一些关于问题的理论方面的信息,以及一些实际的解决方案
  • 您可以创建地图或对象以了解使用日期和/或状态作为键的重复值。我会用它来减少和过滤。尝试努力并上传您的代码以了解您做了什么。

标签: javascript arrays algorithm


【解决方案1】:

也许使用reduce

const newArr = Object.values(arr.reduce((acc, { date, state, duration }) => {
  acc[date+state] = (acc[date+state] || 0) + +duration
  return acc
}, {}))

或者类似的东西

arr.reduce((acc, { date, state, duration }) => {
  if (!acc[state]) {
    acc[state] = {}
  }
  acc[state][date] = (acc[state][date] || 0) + +duration
  return acc
}, {})

还有一些 Object.keys() 和 sort() 的逻辑

【讨论】: