我的头撞在试图用lodash做以下事情的井上。我有一个带有更多嵌套对象的对象数组,看起来像这样:
[{
id: 123,
name: 'John',
summary1: {
count: 3,
sum: 10,
},
summary2: {
count: 10,
sum: 20
},
},
...
]
我想将此数组的每个元素转换成这样的东西:
[{
id: 123,
name: 'John',
summary1_count: 3,
summary1_sum: 10
summary2_count: 10,
summary2_sum: 20,
},
...
]
所以基本上,我想以某种方式“展平”数组的每个元素,以便根据主键和子键确定对象键。如何使用lodash或纯JS完成此操作?
您可以像示例中那样假设只有一级嵌套。
最佳答案
您可以通过遍历原始数组中每个项目的键,检查其类型,然后进一步遍历其内部键,构建新的键来保留正确的值,而无需lodash(或其他库)。
const array = [{
id: 123,
name: 'John',
summary1: {
count: 3,
sum: 10
},
summary2: {
count: 10,
sum: 20
}
}];
let newArray = array.map(item => {
let newObj = {};
Object.keys(item).forEach(key => {
if (typeof item[key] === 'object') {
Object.keys(item[key]).forEach(innerKey => {
newObj[`${key}_${innerKey}`] = item[key][innerKey];
});
} else {
newObj[key] = item[key];
}
});
return newObj;
});
console.log(newArray);
当然,这不一定是非常漂亮或灵活的(遵循您对单个级别的假设)。
关于javascript - 用lodash展平嵌套的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44076106/