Как использовать lodash для группировки нескольких вложенных статей JSON? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь выяснить, как сгруппировать мою статью JSON, используя lodash с функциями отображения и группировки. Я довольно новичок в lodash и javascript в целом, но я подошел близко, но не могу понять последний бит форматирования!

Что я пробовал

    const data = [{
      "pcc": "1ADA",
      "markets": {
        "origin": "ORG",
        "destination": "DES"
      }
    }, {
      "pcc": "1ADA",
      "markets": {
        "origin": "ORD",
        "destination": "DES"
      }
    },{
      "pcc": "1ADA",
      "markets": {
        "origin": "ORG",
        "destination": "DES"
      }
    }, {
      "pcc": "1AZA",
      "markets": {
        "origin": "ORG",
        "destination": "DES"
      }
    }, {
      "pcc": "1AXA",
      "markets": {
        "origin": "ORG",
        "destination": "DES"
      }
    }]

    excelDef = _(data)
      .groupBy("pcc")
      .map((group, pcc) =>({
        pcc,
        markets: group.map(({origin, markets: destination}) => ({
          origin,
          destination
        }))
      }))
      .value();

Вывод, который я получаю

 [{
      "pcc": "1ADA",
      "markets": [{
        "destination": {
          "origin": "ORG",
          "destination": "DES"
        }
      }, {
        "destination": {
          "origin": "ORD",
          "destination": "DES"
        }
      }, {
        "destination": {
          "origin": "ORG",
          "destination": "DES"
        }
      }]
    }, {
      "pcc": "1AZA",
      "markets": [{
        "destination": {
          "origin": "ORG",
          "destination": "DES"
        }
      }]
    }, {
      "pcc": "1AXA",
      "markets": [{
        "destination": {
          "origin": "ORG",
          "destination": "DES"
        }
      }]
    }]

Желаемый выход

[{
"pcc": "1ADA",
"markets": [{
    "origin": "ORG",
    "destination": "DES"
}, {
    "origin": "ORD",
    "destination": "DES"
}, {
    "origin": "ORG",
    "destination": "DES"
}]
}, {
 "pcc": "1AZA",
 "markets": [{
    "origin": "ORG",
    "destination": "DES"
}]
}, {
 "pcc": "1AXA",
 "markets": [{
    "origin": "ORG",
    "destination": "DES"
  }]
}]

Я чувствую, что я близок к желаемому результату, но синтаксис функции отображения и группировки всегда отбрасывает меня как человека, начинающего программировать. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 17 января 2019

В другом подходе, без lodash, вы можете использовать reduce:

const data=[{"pcc":"1ADA","markets":{"origin":"ORG","destination":"DES"}},{"pcc":"1ADA","markets":{"origin":"ORD","destination":"DES"}},{"pcc":"1ADA","markets":{"origin":"ORG","destination":"DES"}},{"pcc":"1AZA","markets":{"origin":"ORG","destination":"DES"}},{"pcc":"1AXA","markets":{"origin":"ORG","destination":"DES"}}]

const resp = data.reduce((acc, ele) => {
    const ant = acc.find(x => x.pcc === ele.pcc);
    if(!ant) return acc.concat({pcc: ele.pcc, markets: [ele.markets]});
    ant.markets.push(ele.markets);
    return acc;
}, []);

console.log(resp);
...