【发布时间】:2017-05-10 19:26:35
【问题描述】:
我正在尝试对一些 javascript 对象进行一些映射/减少,但失败得很惨。
来自后端的数据看起来像这样:
[
{table:"a1", data: {colA:1,colB:2,colC:3}},
{table:"a2", data: {colA:2,colB:3,colC:4}},
{table:"a3", data: {colA:3,colB:4,colC:5}}
]
Recharts 需要以下格式的数据(将源数据键作为结果的唯一“名称”键)
[
{name: 'colA', a1: 1, a2: 2, a3: 3},
{name: 'colB', a1: 2, a2: 3, a3: 4},
{name: 'colC', a1: 3, a2: 4, a3: 5}
]
我目前的解决方案是O(n^n),因为我正在构建一个结果对象,并且每次都循环它。我正在使用 ECMA6/Babel 以及 Lodash。任何指导将不胜感激!谢谢!
编辑:这是我目前的解决方案
var dest = []
Lodash.forEach(source,(o) => {
var table = o.table;
Lodash.forEach(o.data, (p,q) => {
// See if the element is in the array
const index = Lodash.findIndex(dest,(a) => {return a.name === q});
if ( index === -1) {
var obj = {};
obj[table] = Number(p);
obj.name = q;
dest.push(obj);
} else {
dest[index][table] = Number(p);
}
})
});
【问题讨论】:
-
具体的问题是什么?如果您需要性能,请使用原始
for。 -
您能发布您当前的解决方案吗?
-
请向我们展示您当前的代码。
-
您的解决方案具有复杂性
O(n² m),而不是O(n^n)
标签: javascript ecmascript-6 lodash