我有以下对象/数组:
[
{
"id": null,
"value": "Apples",
"label": "Apples",
"Quantity": 1,
"Weight": "0.075",
"inputQuantity": "2",
"Category": "BREAKFAST",
"ItemCopy": 2,
"PM": "123"
},
{
"Quantity": 1,
"value": "Apples",
"Weight": "0.075",
"id": null,
"label": "Apples",
"inputQuantity": "3",
"Category": "BREAKFAST",
"ItemCopy": 2,
"PM": "123"
},
{
"value": "Asparagus",
"id": "TnwiO97ZHCsz4vl9A9OR",
"label": "Asparagus",
"Weight": "0.185",
"Quantity": 1,
"inputQuantity": "3",
"Category": "BREAKFAST",
"ItemCopy": 1,
"PM": "123"
}
]
然后,我使用以下代码将它们转换为唯一值:
function getUniqueDataCount(objArr, propName) {
const mi = [...objArr]
var data = [];
objArr.forEach(function (d, index) {
if (d[propName]) {
data.push(d[propName]);
}
});
var uniqueList = [...new Set(data)];
var dataSet = {};
for (var i = 0; i < data.length; i++) {
dataSet[uniqueList[i]] = data.filter(x => x == uniqueList[i]).length;
mi[i].ItemCopy = data.filter(x => x == data[i]).length
}
return mi;
}
useMemo(() => {
mydata = getUniqueDataCount(daataa, 'label');
}, [daataa])
useMemo(() => {
newCheck = Object.values(mydata?.reduce((acc, cur) => Object.assign(acc, { [cur?.label]: cur }), {}))
}, [mydata])
然后,newCheck对象/数组变为:
[
{
"Quantity": 1,
"value": "Apples",
"Weight": "0.075",
"id": null,
"label": "Apples",
"inputQuantity": "2",
"Category": "BREAKFAST",
"ItemCopy": 2
},
{
"value": "Asparagus",
"id": "TnwiO97ZHCsz4vl9A9OR",
"label": "Asparagus",
"Weight": "0.185",
"Quantity": 1,
"inputQuantity": "2",
"Category": "BREAKFAST",
"ItemCopy": 1
}
]
这或多或少是我想要的,但在这个newCheck对象/数组中,它没有正确计算inputQuantity-它应该为5苹果,3芦笋。
我该如何修改它,让它为每一种独特的配料获取每一次出现的inputQuantity?
3条答案
按热度按时间8nuwlpux1#
您只需要使用
Array.reduce
方法进行有效的分组看看这个:
hof1towb2#
实现这一点的一种方法是:
输入数组将只循环一次,数量将转换为数字,以便能够对条目的值进行求和。
vohkndzv3#
我也面临着同样的问题,但我没有发现任何成果