我有一个对象数组,其中包含语言数组。
[
{
"productId":1,
"productEmailTypeId":12,
"languageEmails":[
{
"productEmailId":22,
"languageId":1,
"body":"some body"
},
{
"productEmailId":33,
"languageId":3,
"body":"some body"
}
]
}
]
我将此数组转换为一个查找对象,因为它更适合我的需求
{
"12":{
"productId":1,
"productEmailTypeId":12,
"languageEmails":{
"22":{
"productEmailId":22,
"languageId":1,
"body":"some body"
},
"33":{
"productEmailId":33,
"languageId":3,
"body":"some body"
}
}
}
}
我的问题是我必须将其转换回初始形式,并且似乎无法正确处理。
这是我尝试过的:
_.chain(emails)
.toArray()
.map(item => _.toArray(item))
.value();
问题是我失去了其他属性(它们被合并到数组中)
答案 0 :(得分:2)
虽然有点冗长,但您始终可以两次使用reduce
方法来获取所需的转换:
const oldFormat = _.reduce(emails, function (acc, product) {
return acc.concat({
productId: product.productId,
productEmailTypeId: product.productEmailTypeId,
languageEmails: _.reduce(product.languageEmails, function (acc, language) {
return acc.concat({
productEmailId: language.productEmailId,
languageId: language.languageId,
body: language.body
})
}, [])
})
}, [])
答案 1 :(得分:1)
_.toArray(emails).map(item => {
item.languageEmails = _.toArray(item.languageEmails);
return item;
});