javascript - 在reduce函数中使用函数参数:Javascript
问题描述
我有一组具有以下结构的对象作为响应发送:
let sampleData = [
{ valueObj: { High: 4, Low: 5, Medium: 7 } , time: "1571372233234" , sum: 16 },
{ valueObj: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234" , sum: 9},
{ time: "14354545454", sum: 0},
{ time: "14354545454", sum: 0} }
];
我需要获取数组内每个对象中的每个键并从中形成一个数组。基本上基于所有对象中存在的键进行分组。如果对象没有“值”,它应该在 val1、val2、val3 中返回 0。
result = [
{ name: 'High', data: [4, 5, 0, 0] },
{ name: 'Medium', data: [5, 3, 0, 0] },
{ name: 'Low', data: [7, 1, 0, 0] }
]
只想将参数传递给函数,应该在 reduce 中使用。在这里,我传递“valueObj”,应该在 reduce 中使用。但我无法在 reduce 中引用相同的内容
我尝试了以下方法:
let sampleData = [{ valueObj: { High: 4, Low: 5, Medium: 7 }, time: "1571372233234", sum: 16 }, { valueObj: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234", sum: 9 }, { time: "14354545454", sum: 0 }, { time: "14354545454", sum: 0 }];
let keys = ['High', 'Low', 'Medium'];
function formResult(sampleData, values, keys){
let grouped = sampleData.reduce((r, { values = {} } = {}) => {
r.forEach(({ name, data }) => data.push(values[name] || 0));
return r;
}, keys.map(name => ({ name, data: [] })));
console.log(grouped);
}
formResult(sampleData,"valueObj", keys)
解决方案
重命名values
参数(我用过prop
),因为它在 reduce 函数中使用。使用带有计算属性的解构来提取属性并将其分配给values
:
const sampleData = [{ valueObj: { High: 4, Low: 5, Medium: 7 }, time: "1571372233234", sum: 16 }, { valueObj: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234", sum: 9 }, { time: "14354545454", sum: 0 }, { time: "14354545454", sum: 0 }];
const keys = ['High', 'Low', 'Medium'];
function formResult(sampleData, prop, keys){
let grouped = sampleData.reduce((r, { [prop]: values = {} } = {}) => {
r.forEach(({ name, data }) => data.push(values[name] || 0));
return r;
}, keys.map(name => ({ name, data: [] })));
console.log(grouped);
}
formResult(sampleData,"valueObj", keys);
推荐阅读
- javascript - 模板文字在 Chrome 上引发未捕获的语法错误
- google-chrome - 下载文件时获取文件 URL
- postgresql - 如何在 PostgreSQL 中通过 varchar 选择带有 case-when 开关的整理顺序进行排序
- c# - 无法选中 ASP.NET Core MVC 视图中的复选框
- reactjs - 将 React 组件实现为 html 字符串
- c# - 为什么我无法使用驱动程序连接字符串连接到 MySql .Net,因为它与 Delphi 的 TADOQuery 一起使用?
- python - python3:timedrotatingfilehandler 日志轮换问题与具有多个脚本的相同日志文件
- javascript - Vue 多个组件和访问 Vuex 属性
- qt - 在 QWidget 内部,如果我试图同时调整小部件的大小,则 Qwt 绘图应该调整大小。如何将 resizeevent 应用于 QWidget
- powershell - 如何比较数据集与 adcomputer 记录?