代码之家  ›  专栏  ›  技术社区  ›  CornelC

Lodash嵌套查找对象到数组

  •  0
  • CornelC  · 技术社区  · 6 年前

    我有一个包含语言数组的对象数组。

     [
        {
            "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 回复  |  直到 6 年前
        1
  •  1
  •   sempasha    6 年前
    _.toArray(emails).map(item => {
        item.languageEmails = _.toArray(item.languageEmails);
        return item;
    });
    
        2
  •  2
  •   Adriano Valente    6 年前

    虽然有点冗长,但您可以始终使用 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
          })
         }, [])
       })
    }, [])