javascript - 如何根据颜色获取总数量大小并添加列总计
问题描述
const data = [
{
color: 'red',
_1x: "0",
_2x: "12",
_3x: "0",
_4x: "0",
xxs: "0",
xs: "0",
s: "0",
m: "0",
l: "0",
xl: "0"
},
{
color: 'red',
_1x: "0",
_2x: "9",
_3x: "0",
_4x: "0",
xxs: "0",
xs: "0",
s: "0",
m: "0",
l: "0",
xl: "0"
},
{
color: 'pink',
_1x: "0",
_2x: "0",
_3x: "0",
_4x: "0",
xxs: "0",
xs: "0",
s: "0",
m: "0",
l: "0",
xl: "12"
}
];
const result1 = Object.values(
data.reduce((acc, { color, size, ...rest }) => {
if (!acc.hasOwnProperty(color)) {
acc[color] = {
color,
...rest
};
return acc;
}
Object.keys(rest).forEach(key => {
acc[color][key] = (+acc[color][key] || 0) + +rest[key];
});
return acc;
}, {})
);
console.log(result1)
我在这里要做的是求和并创建一个新列,它将显示所有颜色的总数。
这是预期的输出和示例代码:https ://stackblitz.com/edit/react-hook-cnxprw?file=index.js
我使用reduce
函数根据颜色对相同的大小求和。
解决方案
只需您可以通过嵌套的 for 循环来做到这一点:
const SIZES=["_2x","_3x","_4x","l","m","s","xl","xs","xxs"],data=[{color:"red",_1x:"0",_2x:"12",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"0"},{color:"red",_1x:"0",_2x:"9",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"12",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"12",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"0",_4x:"12",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"0",_4x:"12",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"0"},{color:"pink",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"14",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"14",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"14",l:"0",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"12",l:"0",xl:"0"},{color:"red",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"14",m:"0",l:"0",xl:"0"},{color:"pink",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"14",m:"0",l:"0",xl:"0"},{color:"yellow",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"12"},{color:"pink",_1x:"0",_2x:"0",_3x:"0",_4x:"0",xxs:"0",xs:"0",s:"0",m:"0",l:"0",xl:"12"}];
const result1 = Object.values(
data.reduce((acc, { color, size, ...rest }) => {
if (!acc.hasOwnProperty(color)) {
acc[color] = {
color,
...rest
};
return acc;
}
Object.keys(rest).forEach(key => {
acc[color][key] = (+acc[color][key] || 0) + +rest[key];
});
return acc;
}, {})
);
for (var i = 0; i < result1.length; i++) {
var sum = 0;
for (var j = 0; j < SIZES.length; j++) {
sum += +result1[i][SIZES[j]]
}
result1[i]["Total"] = sum;
}
console.log(result1);
这是预期的表格输出
推荐阅读
- visual-studio-code - 在 VSCode Fortran 调试中检查从另一个模块导入的变量
- wsl-2 - 在 Windows 上使用 com2tcp-rfc2217.bat 并通过 WSL2 (ESP8266) 上传到 COM5 和 platform.io 不工作
- java - 使用 swagger open api 下载文件
- flutter - 如何在flutter中将本地资产pdf文件上传到服务器?
- android - 在@capacitor-community/admob 中找不到广告的发布商数据
- java - 我的测试用例通过但运行计数显示为 0
- python - 使用熊猫计算日期之间的天数
- javascript - 在 NextJS 中更改配置文件的位置
- javascript - React:为什么正确的文件路径在映射时会抛出“找不到模块”错误?
- flutter - Flutter:如何在边框上做平滑渐变?