Lodash вложенный поисковый объект в массив - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть массив объектов, которые содержат массив на языках.

 [
    {
        "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 голосов
/ 19 сентября 2018

Хотя это немного многословно, вы всегда можете дважды использовать метод 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
      })
     }, [])
   })
}, [])
0 голосов
/ 19 сентября 2018
_.toArray(emails).map(item => {
    item.languageEmails = _.toArray(item.languageEmails);
    return item;
});
...