Функция Arrow с условными выражениями, не возвращающими все элементы массива - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть массив, подобный следующему: var arr = ['one', 'two', ['three', 'four']];

При попытке вернуть каждый элемент с помощью функции стрелки он возвращает undefined в качестве третьего элемента вместо значений элементов.Я попытался реструктурировать его, но ни один из них не вернул все элементы обоих массивов.Я мог бы использовать цикл for, выполнить логику для толкания каждого элемента, но я хочу понять и научиться использовать функции стрелок для таких случаев.

arr.map(e => {
 if(typeof(e) == "object"){
    e.map(t => t)
  } else{ return e; }
})

Буду очень признателен за разъяснения по этому вопросу.Ожидаемый результат - массив, подобный следующему: ['one', 'two', 'three', 'four'].

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Array.prototype.map() не предназначен и не реализован для выравнивания массива.Даже если .map() сгладил массив, e.map(t => t) не return исключен из .map() функции обратного вызова в коде вопроса.

arr.map(e => {
 if(typeof(e) == "object"){
    e.map(t => t) // no value is `return`ed here
  } else{ return e; }
})

Существует множество подходов и Arrayметоды, которые можно использовать для выравнивания Array, включая .flat(), .flatMap() и .concat(), например, см. Слияние / выравнивание массива массивов в JavaScript?

0 голосов
/ 25 февраля 2019

Для достижения ожидаемого результата используйте нижеприведенную опцию использования Reduce для возврата всех элементов массива в массиве

var arr = ['one', 'two', ['three', 'four']];

console.log(arr.reduce((acc, v) => {
  typeof(v) == 'object' ? acc.push(...v) : acc.push(v)
  return acc
}, []))



           

codepen - https://codepen.io/nagasai/pen/NJKdKv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...