Uncaught TypeError: acc.push is not a function. При использовании рекурсии

Есть структура данных, неограниченного уровня вложенности, на основании которой нужно создать новый массив. Используя reduce(). При вызове acc.push(getORDSFilter(item)) код падает на втором уровне вызова.

Как я вижу - ошибка возникает уже после выхода из метода. Код и консоль прикладываю. Вызовов этого кода ниже - нет. Без рекурсивного аргумента отрабатывает как нужно.

const getORDSFilter = (dxFilter: any) => {
  console.log('Вызов метода с параметрами', dxFilter)
  let condition: string = 'and'

  if (dxFilter && Array.isArray(dxFilter?.[dxFilter?.length - 1])) {
    condition = dxFilter[1] as string
  }
  if (isGroupFilter(dxFilter)) {
    console.log('Есть вложенность', isGroupFilter(dxFilter))
    const filter = dxFilter?.reduce((acc: any[], item: any) => {
      if (Array.isArray(item)) {
          acc.push(getORDSFilter(item))
      }
      acc.push(parseFilterQuery(item))
      return acc
    }, {})
    return {[`$${condition}`]: filter}
  } else {
    console.log('Вложенности нет, else')
    return {[`$${condition}`]: parseFilterQuery(dxFilter)}
  }
}
введите сюда описание изображения


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

Автор решения: Селюк Михаил

Проблема в первоначальном значении reduce. Нужно передавать объект, а не массив, т.к. я работал с методом push. Спасибо SwaD, ответ в его комментарии.

→ Ссылка