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

Как работать с массивом в котором есть объект и вложенный массив?

let user = [[5,12,2,22,'5,23'],
   {
  name:'abc',
   cost:'5',
   numbers:[1,5,33],
   count:{
     props:4,
     area:7
   }
}]


Как из этого массива, создать новый массив, и чтобы в нем были значения из массива user, что-то типа такого массива должно получиться res = [5,12,2,22,'5,23',cost,'5',numbers,1,5,33,count,props,4,area,7]; и при этом не менять массив user

Я это делал через проверки, создал новый массив и в него добавил всё что является обэектом, потом из этого массива удалил через arra.isArray(), удалил вложенный массив и добавил его в другой массив, а с ассоциативный массивом я работал через двойной цикл for in и вытаскивал эти значения и ключи в другйо массив, правильный ли это метод работы со вложенным объектом? Или можно было сделать всё проще?
  • Вопрос задан
  • 129 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Как из этого массива, создать новый массив, и чтобы в нем были значения из массива user, что-то типа такого массива должно получиться res = [5,12,2,22,'5,23',cost,'5',numbers,1,5,33,count,props,4,area,7];

В смысле - хотите, чтобы все ключи и примитивные значения оказались развёрнуты в одномерный массив?

Рекурсия есть:

const getKeysAndPrimitives = val =>
  val instanceof Object
    ? [].concat(...(val instanceof Array
        ? val
        : Object.entries(val)
      ).map(getKeysAndPrimitives))
    : [ val ];

const result = getKeysAndPrimitives(user);

Рекурсии нет:

function* getKeysAndPrimitives(val) {
  for (const stack = [ val ]; stack.length;) {
    const n = stack.pop();
    if (Object(n) === n) {
      stack.push(...(Array.isArray(n)
        ? [...n]
        : Array.prototype.concat.call([], Object.entries(n))
      ).reverse());
    } else {
      yield n;
    }
  }
}

const result = [...getKeysAndPrimitives(user)];
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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