반응형
객체 (트리)를 재귀 적으로 반복
(jQuery 또는 JavaScript에서) 각 객체와 자식 및 손자 등을 반복하는 방법이 있습니까?
그렇다면 ... 그들의 이름도 읽을 수 있습니까?
예:
foo :{
bar:'',
child:{
grand:{
greatgrand: {
//and so on
}
}
}
}
그래서 루프는 다음과 같이해야합니다 ...
loop start
if(nameof == 'child'){
//do something
}
if(nameof == 'bar'){
//do something
}
if(nameof =='grand'){
//do something
}
loop end
for...in
루프를 찾고 있습니다 .
for (var key in foo)
{
if (key == "child")
// do something...
}
주의하십시오 for...in
루프는 객체의 프로토 타입에 추가 된 것을 포함하여 모든 열거 속성을 반복 할 것이다. 이러한 속성에 대한 작업을 피하려면 hasOwnProperty
메서드를 사용 하여 속성이 해당 개체에만 속하는지 확인할 수 있습니다.
for (var key in foo)
{
if (!foo.hasOwnProperty(key))
continue; // skip this property
if (key == "child")
// do something...
}
루프를 재귀 적으로 수행하는 것은 재귀 함수를 작성하는 것처럼 간단 할 수 있습니다.
// This function handles arrays and objects
function eachRecursive(obj)
{
for (var k in obj)
{
if (typeof obj[k] == "object" && obj[k] !== null)
eachRecursive(obj[k]);
else
// do something...
}
}
관계 트리를 되돌리려면 Object.keys를 재귀 적으로 사용할 수 있습니다.
function paths(item) {
function iter(r, p) {
var keys = Object.keys(r);
if (keys.length) {
return keys.forEach(x => iter(r[x], p.concat(x)));
}
result.push([p])
}
var result = [];
iter(item, []);
return result;
}
var data = {
foo: {
bar: '',
child: {
grand: {
greatgrand: {}
}
}
}
}
console.log(paths(data));
구문 분석 함수가 내장 된 재귀 함수를 가질 수 있습니다.
function parseObjectProperties (obj, parse) {
for (var k in obj) {
if (typeof obj[k] === 'object' && obj[k] !== null) {
parseObjectProperties(obj[k], parse)
} else if (obj.hasOwnProperty(k)) {
parse(obj[k])
}
}
}
나는 foo
OP 의 객체를 사용 합니다.
var foo = {
bar:'a',
child:{
b: 'b',
grand:{
greatgrand: {
c:'c'
}
}
}
}
// use this recursive function with a parse funciton
function parseObjectProperties (obj, parse) {
for (var k in obj) {
if (typeof obj[k] === 'object' && obj[k] !== null) {
parseObjectProperties(obj[k], parse)
} else if (obj.hasOwnProperty(k)) {
parse(obj[k])
}
}
}
//***
// then apply to the property the task you want, in this case just console
parseObjectProperties(foo, function(prop) {
console.log(prop)
})
참조 URL : https://stackoverflow.com/questions/2549320/looping-through-an-object-tree-recursively
반응형
'IT이야기' 카테고리의 다른 글
애자일 환경에서 대규모 프로젝트에 대한 견적 제공 (0) | 2021.05.01 |
---|---|
불완전한 유형의 잘못된 사용 (0) | 2021.05.01 |
'super'키워드로 제네릭 경계 지정 (0) | 2021.05.01 |
익명 유형 동적 생성 (0) | 2021.04.30 |
"git rebase origin"vs. "git rebase origin / master" (0) | 2021.04.30 |