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

Как получить все значения свойств вложенных объектов?

Нужно получить все значения свойств вложенного вложенных объектов в массив. Есть объект:

{ text: "sometext", style: { background: "red" } }

Нужно получить ["sometext", "red"].
  • Вопрос задан
  • 840 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Рекурсия есть:

const getPrimitives = data =>
  data instanceof Object
    ? Object.values(data).flatMap(getPrimitives)
    : [ data ];


const result = getPrimitives(obj);

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

function* getPrimitives(data) {
  for (const stack = [ data ]; stack.length;) {
    const n = stack.pop();
    if (n instanceof Object) {
      stack.push(...Object.values(n).reverse());
    } else {
      yield n;
    }
  }
}


const result = [...getPrimitives(obj)];

или

function* getNestedData(data, test) {
  const stack = [];

  for (let i = 0, arr = [ data ]; i < arr.length || stack.length; i++) {
    if (i === arr.length) {
      [ i, arr ] = stack.pop();
    } else {
      if (test(arr[i])) {
        yield arr[i];
      }

      if (arr[i] instanceof Object) {
        stack.push([ i, arr ]);
        [ i, arr ] = [ -1, Object.values(arr[i]) ];
      }
    }
  }
}


const result = Array.from(getNestedData(obj, x => x !== Object(x)));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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