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

Как записать в одномерный массив все элементы из многомерного?

Всем привет. Учу js. Практикуюсь с рекурсией. Дан массив произвольного уровня вложенности [1, [2, 7, 8], [3, 4, [5, [6, 7]]]]. Нужно каждое значение массива записать в новый массив должно получиться так [1, 2, 7, 8, 3, 4, 5, 6, 7]. Но у меня что то не получается и возвращается массив с таким же уровнем вложенности. Что я сделал не так?
let arr2 = [1, [2, 7, 8], [3, 4, [5, [6, 7]]]];

function func (arr) {
	let res = [];
	for (elem of arr) {
		if (typeof elem == 'object') {
			res.push(func(elem));
		} else {
			res.push(elem);
		}
	}
	return res;
}

console.log(func(arr2));
  • Вопрос задан
  • 1203 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
hzzzzl
@hzzzzl
ar.flat(Infinity)
Ответ написан
Комментировать
@dimoff66
Кратко о себе: Я есть
Если корректировать ваш вариант, то нужно спредить получаемый из func результат
if (typeof elem == 'object') {
      res.push(...func(elem));
    } else {
      res.push(elem);
    }


но есть еще функция flat у массивов, можно использовать ее

elem.flat(Infinity)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Ошибка в том, что возвращается всегда массив.
В т.ч. там, где вроде бы хотели массив распаковать.
Ответ написан
Комментировать
@Jenishbek
let arr = [1, [2, 7, 8], [3, 4, [5, [6, 7]]]];
let arrRes = [];
function func(arr) {
         let res = [];
            for (elem of arr) {
                if (typeof elem == 'object') {
                    res.push(func2(elem));
                } else {
                    arrRes.push(elem);
                }
            }
            return arrRes;
        }
console.log(func(arr));
Ответ написан
Комментировать
@anchous_nachos
let arr = [];
  function func(array) {
    for (let elem of array) {
      if (typeof elem == "object") {
        func(elem);
      } else {
        arr.push(elem);
      }
    }
    return arr;
  }
  console.log(func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]));


с использованием spread оператора:

function func(array) {
    let arr = [];

    if (typeof array == "object") {
      for (let elem of array) {
        arr.push(...func(elem));
      }
    } else {
      arr.push(array);
    }

    return arr;
  }

  console.log(func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]));


с методом array.concat()

function func(array) {
  let arr = [];

  if (typeof array == "object") {
    for (let elem of array) {
      arr = arr.concat(func(elem));
    }
  } else {
    arr.push(array);
  }

  return arr;
}

console.log(func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]));
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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