Ошибка типа: arr.reduce не является функцией - PullRequest
0 голосов
/ 23 марта 2020

Время от времени я получаю сообщение об ошибке, когда я обновляю sh Приложение. Я создаю головоломку реагирования, и я не могу найти то, что мне не хватает или написано неправильно? Может кто-нибудь помочь мне, что я должен написать по-другому?

Сообщение об ошибке: TypeError: arr.reduce is not a function flattenArray

const flattenArray = arr => { return arr.reduce((flatArr, subArr) => flatArr.concat(subArr), []); };

Код:

const getShuffledPuzzle = () => {
  const values = [0, 1, 2, 3, 4, 5, 6, 7, 8];

  const rowOne = [],
    rowTwo = [],
    rowThree = [];

  while (values.length) {
    const random = Math.floor(Math.random() * values.length)

    if (rowOne.length < 3) {
      rowOne.push(values.splice(random, 1)[0])
    } else if (rowTwo.length < 3) {
      rowTwo.push(values.splice(random, 1)[0])
    } else {
      rowThree.push(values.splice(random, 1)[0])
    }
  }
  return [rowOne, rowTwo, rowThree]
}

Вот где я получаю ошибку TypeError:

const flattenArray = (arr) => {
  return arr.reduce((flatArr, subArr) => flatArr.concat(subArr), [])
};

const getInversionCount = arr => {
  arr = flattenArray(arr).filter(n => n !== 0)
  const inversions = [];

  for (let i = 0; i < arr.length - 1; i++) {
    const currentValue = arr[i]
    const currentInversions = arr.filter(
      (val, j) => i < j && val < currentValue
    )
    inversions.push(currentInversions.length)
  }

  const inversionsCount = inversions.reduce((total, val) => total + val, 0)

  return inversionsCount
}

const isSolvable = puzzle => {
  return getInversionCount(puzzle) % 2 === 0
};

const getPuzzle = () => {
  let puzzle = getShuffledPuzzle()

  while (!isSolvable(puzzle)) {
    puzzle = getShuffledPuzzle
  }
  return puzzle
}


````

1 Ответ

0 голосов
/ 24 марта 2020

Для безопасного выравнивания используйте значение по умолчанию в качестве массива.

const flattenArray = (arr = []) => arr.reduce((flatArr, subArr) => flatArr.concat(subArr), [])
...