Как сгладить массив в JavaScript? - PullRequest
1 голос
/ 06 июля 2019

У меня есть код [ 1, 2, 3, fn(), 7, 8 ]

fn делает следующее:

fn(){ return [ 5, 6 ] }

Какой оператор применить к fn(), чтобы получить:

[ 1, 2, 3, 5, 6, 7, 8 ]

вместо:

[ 1, 2, 3, [ 5, 6 ], 7, 8 ]

Конечно, можно сделать:

[ 1, 2, 3, fn(), 7, 8 ].flat()

Но в этом случае будут сглажены и другие элементы.Мне нужно сплющить только для fn()

Ответы [ 2 ]

4 голосов
/ 06 июля 2019

При вызове fn, распространите в массив, который вы создаете:

const fn = () => [ 5, 6 ];

const arr = [ 1, 2, 3, ...fn(), 7, 8, [9, 10]]
console.log(arr);
0 голосов
/ 06 июля 2019

flatMap() возвращает значения функции обратного вызова каждого элемента входного массива в виде массива, который затем возвращается сглаженным. Например, обратный вызов может быть выполнен для возврата следующего:

  • Один-к-одному: возврат [ значение ]
  • один-к-одному: возврат []
  • Один ко многим: возврат [ значение , значение -5, arbritaryValue ]

В демонстрационной версии, если значение является массивом - оно будет возвращено как есть - в противном случае оно будет возвращено в массиве. По сути, все значения будут возвращены из обратного вызова в виде массива, который, в свою очередь, будет сплющен.

const fn = () => [5, 6];

let array = [1, 2, 3, 4, fn(), 7, 8];

const result = array.flatMap(node => Array.isArray(node) ? node : [node]);

console.log(result);
...