@Rufix

Цикл по объектам внутри объекта. Как сделать?

Имеется объект, например такой:
const data = {
  a1: {
    b1: {
      value: 1
    },
    b2: {
      value: -5
    }
  },

  a2: {
    b3: {
      value: 12
    },
    b4: {
      value: 13
    }
  }
}


Как пройтись по каждому value и если оно больше 0, то вернуть этот объект.
Я попробовал так, но не получилось.
for (let input_objects in data) {
    for (let key in input_objects) {
      if (this.value > 0) {
        console.log (this);
      }
    }
  }

Может я вообще лютый бред написал?)
  • Вопрос задан
  • 173 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const getNestedData = (data, condition) => Object
  .values(data instanceof Object ? data : {})
  .reduce((acc, n) => (
    acc.push(...getNestedData(n, condition)),
    acc
  ), condition(data) ? [ data ] : []);


const objects = getNestedData(data, x => x && x.value > 0);
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
this работает только внутри функции.
Плюс нужно перечитать документацию о том, как работает перебор свойств объекта в js:
а) for..in б) Object.keys() в) Object.entries()

Работающий вариант примерно такой:
for (let key_a in data) {
	let input_object = data[key_a];
	for (let key_b in input_object) {
		let obj_b = input_object[key_b];
		if (obj_b.value > 0) {
			console.log(obj_b);
		}
	}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ermek6
@ermek6
::Живу с удовольствием::
imho Object.keys + typeof + рекурсия не будет зависеть от иерархии объектов и выдаст все объекты любой вложенности
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы