Сглаживать вложенные объекты с помощью Lodash - PullRequest
0 голосов
/ 26 декабря 2018

Я зацикливаюсь на объекте со свойством, установленным на массив, который я затем использую следующим образом:

  let merged= [];
  for (let sup of superObject) {
    let sname = sup.superObjectName;
    for (let sub of sup.subObject) {
      merged.push({superObject: sname, subObject: sub.subObjectName})
    }
  }

Теперь приведенный выше код работает и выполняет свою работу, но я чувствую, что его можно улучшитьиспользуя Lodash, и я не могу заставить его работать.Я пытался использовать flatMap несколькими различными способами, но ни один из них не работает, и тот, который в правильном направлении с точки зрения функциональности, не будет казаться улучшением вообще.Есть идеи?

ОБНОВЛЕНИЕ: superObject пример:

{
   superObjectName: "someName",
   subObject: [
      {subObjectName: "someSubName"},
      {subObjectName: "someSubName2"}
    ]
 }

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы можете использовать flatMap , получить реквизит и получить желаемый результат, используя lodash.

var data= [{
   superObjectName: "someName",
   subObject: [
      {subObjectName: "someSubName"},
      {subObjectName: "someSubName2"}
    ]
 }];

const result = _.flatMap(data, ({ superObjectName, subObject}) =>
  _.map(subObject, ({subObjectName})=> ({superObject: superObjectName, subObject: subObjectName}))
);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
0 голосов
/ 26 декабря 2018

Это аналогично вашему коду:

const merged = _.flatMap(superObject, ({superObjectName, subObject}) =>
    _.map(subObject, ({subObjectName}) => ({
        superObject: superObjectName,
        subObject: subObjectName
    }))
);

Каждое значение в superObject преобразуется в массив с map, а затем сглаживается внутри flatMap.

...