@Sergey750il

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

Доброго времени суток. Есть объект areas, как перебрать все ключи state и если хоть у какого то ключа значение true, то вернуть ключ родительского объекта например: ("Какой то район 2")?
let areas = {
	"Какойто район 2": {
		"1 января 2019": {
			"математика 1": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			},
			"физика yyy 1": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			}
		},
		"2 января 2019": {
			"математика 2": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			},
			"физикаyyyyyy 2": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			}
		}
	},
	"Какойто район 3": {
		"1 июля 2019": {
			"математика 1ll": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			},
			"физика yyy 1l": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			},
			"физика yyy 1ll": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			}
		},
		"2 января 2019": {
			"математика 2": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: true
				}
			},
			"физикаyyyyyy 2": {
				"ППЕ1": {
					meta: "Какоето описание, руковдители итд",
					state: false
				},
				"ППЕ2": {
					meta: "Какоето описание, руковдители итд",
					state: true
				},
				"ППЕ3": {
					meta: "Какоето описание, руковдители итд",
					state: false
				}
			}
		}
	}
};

Пробовал так, но запутался:
for (area in areas) { // области 
			for (prop in areas[area]) {
				//console.log(prop);
				if (prop == dateVal) {
					for (propp in areas[area][prop]) { //даты 
						if (propp == predmetVal) {
							for (ropp in areas[area][prop][propp]) { //предмет
								for (ropps in areas[area][prop][propp][ropp]) { //ппе
									//if(areas[area][prop][propp][ropp].state == false){
                                     console.log(areas[area][prop][propp][ropp].state);
									//}
								}
							}
						}
					}
				}
			}
		}
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
twobomb
@twobomb
Если родительского тому который state
то так

func2(areas);
function func2(obj) {
  for (var v in obj) {
        if (typeof(obj[v]) == "object" && typeof(obj[v]["state"]) == "undefined")
      arguments.callee(obj[v]);
    else if (typeof(obj[v]["state"]) != "undefined") {
      if (obj[v]["state"])
        console.log(v);
    }
  }
}


Если родительского имеется ввиду самый верхний
то так

console.log(func(areas));


function func(obj,lvl) {
if(lvl == null)
	 lvl = 1;
var res = [];
  for (var v in obj) {
        if (typeof(obj[v]) == "object" && typeof(obj[v]["state"]) == "undefined"){
        var r = arguments.callee(obj[v],lvl+1);
        if(lvl == 1 && r === true)
        	res.push(v);
        else if(r === true)
        	return r;
        }
    else if (typeof(obj[v]["state"]) != "undefined") {
      return obj[v]["state"];
    }
  }
  return res;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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