Ich habe unten json als Eingabe

result = [
    {
        "category": "Social Media",
        "sub_category": "Facebook"
    },
    {
        "category": "Social Media",
        "sub_category": "Instagram"
    },
    {
        "category": "Tech",
        "sub_category": "Angular"
    },
    {
        "category": "Tech",
        "sub_category": "Javascript"
    }
]

Ich versuche, unter json zu erreichen

{
  "Social Media": [
    "Facebook",
    "Instagram"
  ],
  "Tech": [
    "Angular",
    "Javascript"
  ]
}

Unter dem Code habe ich versucht, dies zu aktivieren. Könnte jemand bitte helfen, wo ich falsch mache

let result = [{
    "category": "Social Media",
    "sub_category": "Facebook"
  },
  {
    "category": "Social Media",
    "sub_category": "Instagram"
  },
  {
    "category": "Tech",
    "sub_category": "Angular"
  },
  {
    "category": "Tech",
    "sub_category": "Javascript"
  }
]
let data = [];
let categorySet = new Set();
result.forEach((val, key) => {
  categorySet.add(val.category);
});

result.forEach((val, key) => {
  let subCat = new Set();
  categorySet.forEach((v, k) => {
    if (v == val.category) {
      let d = {};
      d[val] = subCat.add(val.sub_category);
      data.push(d)
    }
  })
});

console.log(data)
1
Sangram Badi 19 Aug. 2020 im 09:05

3 Antworten

Beste Antwort

Ihre Frage hat eigentlich nichts mit es6 zu tun, aber hier ist der Code, der helfen könnte:

const data = {}

let result = [{
    "category": "Social Media",
    "sub_category": "Facebook"
  },
  {
    "category": "Social Media",
    "sub_category": "Instagram"
  },
  {
    "category": "Tech",
    "sub_category": "Angular"
  },
  {
    "category": "Tech",
    "sub_category": "Javascript"
  }
];

result.forEach((value) => {
  data[value.category] = data[value.category] || []
  data[value.category].push(value.sub_category)
});

console.log(data);

Ich bin mir nicht sicher, warum Sie ein Set verwenden wollten, weil ein Set näher an einem Array liegt, aber was Sie als Endergebnis erhalten möchten, ist ein Objekt

2
Karan 19 Aug. 2020 im 06:17

Sie können lodash verwenden. Probieren Sie dieses Beispiel aus

result = [
    {
        "category": "Social Media",
        "sub_category": "Facebook"
    },
    {
        "category": "Social Media",
        "sub_category": "Instagram"
    },
    {
        "category": "Tech",
        "sub_category": "Angular"
    },
    {
        "category": "Tech",
        "sub_category": "Javascript"
    }
]

var groupJson= _.groupBy(result, function(result) {
  return result.category;
});
console.log(groupJson);
 
<script src='https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js'></script>
2
dpmemcry 19 Aug. 2020 im 06:27

Dies würde die erwartete Ausgabe ergeben:

let result = [{
    "category": "Social Media",
    "sub_category": "Facebook"
  },
  {
    "category": "Social Media",
    "sub_category": "Instagram"
  },
  {
    "category": "Tech",
    "sub_category": "Angular"
  },
  {
    "category": "Tech",
    "sub_category": "Javascript"
  }
];

let data = {};
result.forEach((row) => {
  if (!data[row.category]) {
    data[row.category] = [];
  }
  if (!data[row.category].includes(row.sub_category)) {
    data[row.category].push(row.sub_category);
  }
});

console.log(data);
1
Karan 19 Aug. 2020 im 06:23