基本上我想对具有相同键值的对象进行分组。

const dupObj = [
  {
    "uuid": "",
    "quantity": 0,
    "distributeStoreUuid": "",
    "distributeStore__acceptanceTaskDetailsUuid": "",
    "acceptanceTaskUuid": "acabb997-fc06-47ba-ae29-d7aea9a6a022",
  },
  {
    "uuid": "",
    "quantity": 3,
    "acceptanceTaskUuid": "acabb997-fc06-47ba-ae29-d7aea9a6a022",
  }
 ]


这是预期的结果

[
 {
   "uuid": "",
   "quantity": 3,
   "distributeStoreUuid": "",
   "distributeStore__acceptanceTaskDetailsUuid": "",
   "acceptanceTaskUuid": "acabb997-fc06-47ba-ae29-d7aea9a6a022",
 }
]


我正在尝试使用ES6 Set,到目前为止,这里有什么

const uniKeys = [...(new Set(dupObj.map(({ acceptanceTaskUuid }) => acceptanceTaskUuid)))];


任何的想法?提前致谢

最佳答案

下面的代码应该工作:



const dedupe = originalArray => originalArray.reduce((array, obj) => {
  const index = array.findIndex(item => item.acceptanceTaskUuid === obj.acceptanceTaskUuid)

  // if there already is no other acceptance task uuid
  // then append the obj to the array else add the quantities together
  return index === -1 ? [...array, obj] : Object.assign([], array, {
    [index]: Object.assign({}, array[index], obj)
  })
}, [])

console.log(dedupe([
  {
    "uuid": "",
    "quantity": 0,
    "distributeStoreUuid": "",
    "distributeStore__acceptanceTaskDetailsUuid": "",
    "acceptanceTaskUuid": "acabb997-fc06-47ba-ae29-d7aea9a6a022",
  },
  {
    "uuid": "",
    "quantity": 3,
    "acceptanceTaskUuid": "acabb997-fc06-47ba-ae29-d7aea9a6a022",
  },
  {
    "uuid": "",
    "quantity": 4,
    "acceptanceTaskUuid": "foobar"
  },
  {
    "uuid": "",
    "quantity": 13,
    "acceptanceTaskUuid": "foobarbaz",
  },
  {
    "uuid": "",
    "quantity": 6,
    "acceptanceTaskUuid": "foobar",
  },
]))





findIndex函数返回匹配条件的数组中第一项的索引。基本上,以上代码从一个空数组开始,循环遍历原始数组(reduce),并在每次迭代时查找具有与当前对象相同的接受任务uuid​​的项目索引。如果重复,则将数量加在一起,否则将新项目追加到数组中

编辑:不可变

关于javascript - 从对象数组中删除元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48679211/

10-12 14:05
查看更多