ES2019 ввел два новых метода в прототип массива: плоский и Плоская карта . Они оба очень полезны для того, что мы хотим сделать: сгладить массив .
Давайте посмотрим, как они работают.
Но сначала хочу предупредить: только Firefox 62+, Chrome 69+, Edge 76+ и Safari 12+ уже поддерживают эти 2 метода, так как они появились сравнительно недавно. Проверьте текущую поддержку браузера и помните, что вы можете использовать Babel для переноса кода в предыдущую версию ES, если вам нужна поддержка старых браузеров.
Если вы не хотите иметь дело с Babel, и у вас еще нет этапа сборки, возможно, имеет смысл использовать flatten() , flattenDeep() и сгладить глубину() функции, предоставляемые Lodash.
Самое замечательное в Lodash то, что вам не нужно импортировать всю библиотеку целиком. Вы можете использовать эти функции по отдельности, используя эти пакеты:
- Вы можете использовать эти функции по отдельности, используя эти пакеты:
- Вы можете использовать эти функции по отдельности, используя эти пакеты:
- Вы можете использовать эти функции по отдельности, используя эти пакеты:
Вот как сгладить массив с помощью lodash.сгладить :
const flatten = require('lodash.flatten')
const animals = ['Dog', ['Sheep', 'Wolf']]
flatten(animals)
//['Dog', 'Sheep', 'Wolf']
Давайте теперь поговорим о родной квартире( ) и flatMap() методы JavaScript теперь.
квартира () – это новый метод экземпляра массива, который может создавать одномерный массив из многомерного массива.
Пример:
['Dog', ['Sheep', 'Wolf']].flat() //[ 'Dog', 'Sheep', 'Wolf' ]
По умолчанию он “выравнивается” только до одного уровня.
Вы можете добавить параметр в flat() , чтобы задать количество уровней, на которые вы хотите выровнять массив.
Установите его на Бесконечность иметь неограниченное количество уровней:
['Dog', ['Sheep', ['Wolf']]].flat() //[ 'Dog', 'Sheep', [ 'Wolf' ] ] ['Dog', ['Sheep', ['Wolf']]].flat(2) //[ 'Dog', 'Sheep', 'Wolf' ] ['Dog', ['Sheep', ['Wolf']]].flat(Infinity) //[ 'Dog', 'Sheep', 'Wolf' ]
Если вы знакомы с методом JavaScript map() массива, вы знаете, что с его помощью вы можете выполнить функцию для каждого элемента массива.
Если нет, проверьте мой учебник по JavaScript map().
flatMap() – это новый метод прототипа массива, который объединяет flat() с map() . Это полезно при вызове функции, которая возвращает массив в обратном вызове map() , но вы хотите, чтобы полученный массив был плоским:
['My dog', 'is awesome'].map(words => words.split(' '))
//[ [ 'My', 'dog' ], [ 'is', 'awesome' ] ]
['My dog', 'is awesome'].flatMap(words => words.split(' '))
//[ 'My', 'dog', 'is', 'awesome' ]
Оригинал: “https://flaviocopes.com/javascript-flatten-array/”