JS перестройка записей в цикле
У меня есть вот такой массив с объектами
[
{
id: 196,
title: 'Title1',
price: '470.25',
order_id: 12
},
{
id: 174,
title: 'Title2',
price: '470.25',
order_id: 12
},
{
id: 175,
title: 'Title3',
price: '470.25',
order_id: 13
}
]
Вот мой код
for (let i = 0; i < allRowsFromAllUserOrders.length; i++) {
allUserOrders[allRowsFromAllUserOrders[i]["order_id"]] = [
{
title: allRowsFromAllUserOrders[i]["title"],
quantity: allRowsFromAllUserOrders[i]["quantity"],
product_id: allRowsFromAllUserOrders[i]["product_id"]
}
];
}
Он выстравает масив вот так, ключи идут по порядку 12, 13, 14, 15. Один ключ на запись.
"data": {
"12": [
{
"title": "Title1",
"quantity": 5,
"product_id": 196
}
],
"13": [
{
"title": "Title1",
"quantity": 5,
"product_id": 174
}
],
"14": [
{
"title": "Title1",
"quantity": 5,
"product_id": 175
}
],
А нужно,чтобы ключи брались из order_id. И Если есть две записи для order_id, то оба объекта были внутри элемента массива с ключем 12, а именно?
"data": {
"12": [
{
"title": "Title1",
"quantity": 5,
"product_id": 196
},
{
"title": "Title2",
"quantity": 5,
"product_id": 174
}
],
"14": [
{
"title": "Title3",
"quantity": 5,
"product_id": 175
}
]
Как такое сделать?
Ответы (2 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
for (let i = 0; i < allRowsFromAllUserOrders.length; i++) {
let order = allRowsFromAllUserOrders[i];
if( !allUserOrders[ order.order_id ] ) allUserOrders[ order.order_id ] = [];
// Если массива с таким id нет - создать его.
allUserOrders[ order.order_id ].push(
{
title: order.title,
quantity: order.quantity,
product_id: order.product_id
}
); // И уже не присваивать объект, а добавлять в массив.
}
P.s. в мелких скобках кода можно создавать локальные переменные покороче, чтобы не повторять переменные из предложений) А ["Скобочную нотацию"] используют, когда ключ состоит из пробелов, спец символов или переменных. Если это обычная строка - легче через .точку
Автор решения: Qwertiy
→ Ссылка
(allUserOrders[allRowsFromAllUserOrders[i].order_id] = allUserOrders[allRowsFromAllUserOrders[i].order_id] || []).push(твойОбъект)