【发布时间】:2018-11-02 10:30:37
【问题描述】:
使用此示例对象数组:
[{
"Element ID": "299",
"Element Name": "Manager",
"Scale ID": "IM",
"Data Value": "3.5"
},
{
"Element ID": "299",
"Element Name": "Manager",
"Scale ID": "LV",
"Data Value": "3"
},
{
"Element ID": "300",
"Element Name": "FinTech",
"Scale ID": "IM",
"Data Value": "1.75"
},
{
"Element ID": "300",
"Element Name": "FinTech",
"Scale ID": "LV",
"Data Value": "1.38"`
}]
我写了这段代码来合并Element ID的重复对象并重命名一些元素:
let p = {};
const output = input
.map(s => {
if (_.isEmpty(p)) {
p = s;
return {};
}
if (p['Element ID'] !== s['Element ID']) return {};
const result = {
name: s['Element Name'],
id: s['Element ID'],
importance:
p['Scale ID'] === 'IM'
? p['Data Value']
: s['Scale ID'] === 'IM'
? s['Data Value']
: null,
level:
p['Scale ID'] === 'LV'
? p['Data Value']
: s['Scale ID'] === 'LV'
? s['Data Value']
: null,
};
p = {};
return result;
})
.filter(n => Object.keys(n).length);
所以它现在输出所需的格式:
[{
"name": "Manager",
"id": "299",
"importance": "3.5",
"level": "3"
},
{
"name": "FinTech",
"id": "300",
"importance": "1.75",
"level": "1.38"
}]
这是一个复杂的方法,如果输入对象数组在数组中没有两个彼此相邻的完全相同的对象,则会失败。有没有更好的方法通过lodash、.reduce() 或我不考虑的类似方法?
【问题讨论】:
标签: javascript node.js functional-programming lodash