나는이 for
목적을 반복해야 루프를. 그러나이 개체는 내부에 다른 많은 개체 수준을 가질 수 있습니다. for
루프 내부에 for
루프를 원하는만큼 깊이 있게 만드는 함수를 어떻게 만들 수 있습니까?
다음과 같이 lvl
변수는 다이빙해야하는 레벨의 수입니다.
var lvl = 5;
for (var i = 0; i < groups.length; i++) {
var groups = groups[i];
for (var i = 0; i < groups.length; i++) {
var groups = groups[i];
for (var i = 0; i < groups.length; i++) {
var groups = groups[i];
}
}
}
예를 들어 다음과 같은 개체 트리가있는 경우 :
var foo = {
child: {
grand:{
greatgrand: {
}
}
}
}
개체의 특정 수준으로 다이빙하여 모든 개체 트리 이름을 콘솔로 기록하려면 어떻게 foo
해야합니까?
dive(2); // would dive to level two (grand)
// would return the following in the console
child
grand
여기 있습니다. 객체 그래프를 반복하는 재귀 함수를 코딩했습니다. traverse 함수에 깊이 인수를 제공 할 수 있습니다.
JSFiddle이 여기 있습니다 . 출력은 개발자 도구 콘솔을 확인하십시오.
들여 쓰기가 추가 된 바이올린이 여기에 있습니다.
var obj = {
firstName: "John",
lastName: "Doe",
address1A: {
street: "120 Washington St",
city: "Mountain View",
state: "CA",
address2A: {
street: "100 Washington st",
city: "Mountain View",
state: "CA",
address3A: {
street: "150 Washington st",
city: "Mountain View",
state: "CA",
address4A: {
street: "150 Washington st",
city: "Mountain View",
state: "CA",
}
}
}
},
address1B: {
street: "120 Washington St",
city: "Mountain View",
state: "CA",
address2B: {
street: "100 Washington st",
city: "Mountain View",
state: "CA",
address3B: {
street: "150 Washington st",
city: "Mountain View",
state: "CA",
address4B: {
street: "150 Washington st",
city: "Mountain View",
state: "CA",
}
}
}
}
};
function traverse(initObj, depth) {
depthTraversal(initObj, depth, 1);
}
function depthTraversal(objArg, depthArg, counterArg) {
//create a closure for remembering loop variables
return (function (myObj, myDepth, counter) {
//console.log(myDepth + " - " + counter);
if (myDepth < counter) {
return;
}
//console.log(myObj);
for (var prop in myObj) {
//console.log(prop + " :" + typeof (myObj[prop]));
if (myObj.hasOwnProperty(prop)) {
if (typeof (myObj[prop]) === "object") {
console.log(prop);
depthTraversal(myObj[prop], myDepth, counter + 1);
}
}
}
}(objArg, depthArg, counterArg)); //IIFE
};
traverse(obj, 4);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다