Фильтрация объекта
Пытаюсь сделать фильтрацию с динамическими ключами, есть такой код:
function sortName() {
const lengthArr = []
let nameSort = {}
// part 1
props.sortedOrders.map(e => {
return e.dishes.map(e => {
lengthArr.push(e)
})
})
console.log("lengthArr", lengthArr)
// part 2
lengthArr.map(e => {
nameSort[`${e.name}`] = []
for (let j = 0; j < Object.keys(nameSort).length; j++) {
nameSort[j] === e.name.value ? nameSort[e.name].push(e) : null
}
})
console.log("nameSort", nameSort)
}
Суть фильтрации - пользователи делают заказы блюд, а я создаю объект, ключи которого равны названиям блюд. Если ключ объекта равен названию блюда, то я в объект по нужному пушу это блюдо.
nameSort - объект, который я пытаюсь получить, lengthArr - массив, в который я пушу все элементы. По умолчанию они оба пусты:
const lengthArr = []
let nameSort = {}
Далее, я пушу все элементы в массив lengthArr с помощью метода map:
// part 1
props.sortedOrders.map(e => {
return e.dishes.map(e => {
lengthArr.push(e)
})
})
console.log("lengthArr", lengthArr)
sortedOrders - массив объектов. Он находится в props и имеет структуру, как на скрине.
Далее же я делаю map уже по lengthArr, создаю нужные ключи через nameSort[${e.name}] = [] (ключ равен имени заказа, значение - пустой массив), делаю цикл for по количеству ключей, и если ключ совпадает с именем заказа, пушу заказ в нужный ключ:
// part 2
lengthArr.map(e => { // мапим массив
nameSort[`${e.name}`] = [] // создаем нужные ключи со значением пустого массива
for (let j = 0; j < Object.keys(nameSort).length; j++) { // цикл по количеству созданных ключей
nameSort[j] === e.name.value ? nameSort[e.name].push(e) : null // пушим в нужный ключ
}
})
console.log("nameSort", nameSort)
Это то, как я думал, это должно работать. Но это работает некорректно: я заказал 3 блюда, ключи создаются правильно, но количество элементов в каждом ключе неправильное (каждый массив должен иметь длину, равную 1, так как я заказал 3 разных блюда). В чем я мог ошибиться? Буду очень благодарен за помощь.
1 скрин - входные данные (sortedOrders - массив объектов, где каждый объект - отдельный заказ)
2 скрин - массив объектов lengthArr, который я получаю после того, как замапил sortedOrders
3 скрин - результат, который получил я (ключи создались правильно, но количество элементов неправильное: я заказал 3 блюда по 1 экземпляру, то есть длина каждого из массивов должна быть равна 1)
Результат, который мне нужен в данном примере:
nameSort {
гуляш: [Object],
оливье: [Object],
суп: [Object],
}
Длина каждого из массивов - 1 элемент