【发布时间】:2020-06-14 12:46:15
【问题描述】:
我有一个具有以下结构的对象数组
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 中使用。我收到此错误 any cannot be used as index 每当我传递将在 reduce 函数中使用的动态字符串时每当启用打字稿时。
代码运行良好,但是在我升级到最新的 TS 后,它抛出错误并且无法编译
有人可以帮我吗?
我尝试了以下方法:
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 typescript ecmascript-6 ecmascript-5 ecmascript-2016