基本上我想对具有相同键值的对象进行分组。
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/