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