arrays - Transformer javascript-objekt
Denne enkle (som før, trodde jeg) transformasjonen av et JavaScript-objekt overgår meg. Jeg vil gjerne flate ut dette objektet på følgende måte.
Dette er hva jeg har:
{
"1": {
"group": "Clothes",
"brand": {
"0": {
"brand_id": "12",
"brand_name": "Adidas"
},
"1": {
"brand_id": "15",
"brand_name": "Zara"
}
}
},
"2": {
"group": "Cars",
"brand": {
"0": {
"brand_id": "43",
"brand_name": "Ferrari"
},
"1": {
"brand_id": "51",
"brand_name": "BMW"
}
}
}
}
Og dette er det, hva jeg vil få
{0: {
brand_id: "12",
brand_name: "Adidas",
group: "Clothes",
}
1: {
brand_id: "15",
brand_name: "Zara",
group: "Clothes",
},
2: {
brand_id: "43",
brand_name: "Ferrari",
group: "Cars",
}
3: {
brand_id: "51",
brand_name: "BMW",
group: "Cars",
}}
Jeg prøvde å bruke .reduce() eller .map(), men uten effekt.
Svar #1
Du kan gjøre:
const data = {1: {group: 'Clothes',brand: [{0: {brand_id: '12',brand_name: 'Adidas'}},{1: {brand_id: '15',brand_name: 'Zara'}}]},2: {group: 'Cars',brand: [{0: {brand_id: '43',brand_name: 'Ferrari'}},{1: {brand_id: '51',brand_name: 'BMW'}}]}};
const result = {};
Object.keys(data).forEach(k => {
data[k].brand.forEach((b, i) => {
result[Object.keys(result).length] = {
brand_id: b[i].brand_id,
brand_name: b[i].brand_name,
group: data[k].group
};
});
});
console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }Svar #2
Dette objektet er litt rart, som array-lignende objekter, men indeksen starter fra 1, ikke 0, og mangler length.
Fiks noen skrivefeil først, brand burde være object, ikke array.
var objectOri = {
1: {
group: 'Clothes',
brand: {
0: {
brand_id: "12",
brand_name: "Adidas"
},
1: {
brand_id: "15",
brand_name: "Zara"
}
}
},
2: {
group: 'Cars',
brand: {
0: {
brand_id: "43",
brand_name: "Ferrari"
},
1: {
brand_id: "51",
brand_name: "BMW"
}
}
}
};
let arr = [];
Object.keys(objectOri).forEach(index => {
let brand = objectOri[index].brand;
Object.keys(brand).forEach(brIndex => {
arr.push({
...brand[brIndex],
group: objectOri[index].group
});
});
});
console.log(Object.assign({}, arr))
Også, hvis dette objektet er et array-lignende objekt, bør nøkkelen starte fra 0, ikke 1, og lengde er også nødvendig, som vist nedenfor.
var objectOri = {
0: {
group: 'Clothes',
brand: {
0: {
brand_id: "12",
brand_name: "Adidas"
},
1: {
brand_id: "15",
brand_name: "Zara"
},
length: 2
}
},
1: {
group: 'Cars',
brand: {
0: {
brand_id: "43",
brand_name: "Ferrari"
},
1: {
brand_id: "51",
brand_name: "BMW"
},
length: 2
}
},
length: 2
};
let arr = [];
Array.from(objectOri).forEach(item => {
Array.from(item.brand).forEach(brand => {
arr.push({
...brand,
group: item.group
});
});
});
console.log(Object.assign({}, arr))
