Фильтрация объекта

Пытаюсь сделать фильтрацию с динамическими ключами, есть такой код:

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 - массив объектов, где каждый объект - отдельный заказ) sortedOrders 2 скрин - массив объектов lengthArr, который я получаю после того, как замапил sortedOrders введите сюда описание изображения 3 скрин - результат, который получил я (ключи создались правильно, но количество элементов неправильное: я заказал 3 блюда по 1 экземпляру, то есть длина каждого из массивов должна быть равна 1)введите сюда описание изображения Результат, который мне нужен в данном примере:

nameSort {
    гуляш: [Object],
    оливье: [Object],
    суп: [Object],
}

Длина каждого из массивов - 1 элемент


Ответы (0 шт):