Lodash将查找对象嵌套到数组

时间:2018-09-19 15:53:28

标签: javascript arrays lodash

我有一个对象数组,其中包含语言数组。

 [
    {
        "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();

问题是我失去了其他属性(它们被合并到数组中)

2 个答案:

答案 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;
});
相关问题