Задать вопрос
@coder56

Как слить элементы вложенных массивов в одну строку?

function func(arr) {
	for (let elem of arr) {
		if (typeof elem == 'object') {
			func(elem);
		} else {
			console.log(elem);
		}
	}
}

func(['a', ['b', 'c', 'd'], ['e', 'f', ['g', ['j', 'k']]]]);

именно в этом примере нужно как-то слить элементы массива в одну строку
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Максимально простое решение, превращаем вложенный массив в плоский с помощью встроенного метода:

const join = val =>
  Array.isArray(val)
    ? val.flat(Infinity).join('')
    : `${val}`;

Чуть посложнее, применяем рекурсию:

const join = val =>
  val instanceof Array
    ? val.reduce((acc, n) => acc + join(n), '')
    : val + '';

Ещё сложнее, рекурсии нет:

function join(val) {
  const result = [];
  const stack = [];

  for (let i = -1, arr = [ val ]; ++i < arr.length || stack.length;) {
    if (i === arr.length) {
      [ i, arr ] = stack.pop();
    } else if (arr[i]?.constructor === Array) {
      stack.push([ i, arr ]);
      [ i, arr ] = [ -1, arr[i] ];
    } else {
      result.push(arr[i]);
    }
  }

  return ''.concat(...result);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы