2015-02-03 3 views
0

이 코드에서는 부모 개체의 모든 중첩 된 개체 리터럴을 찾으려고합니다. 중첩 된 개체 중 하나는 자체 속성으로 places라는 배열이 있습니다 .이라는 재귀 함수가 있습니다. 모든 속성을 거쳐 부모 객체 내부에 중첩 된 객체 리터럴을 찾습니다.중첩 된 개체 리터럴로 배열을 채우십시오

내 부모 개체에는 3 개의 중첩 된 개체 리터럴이 있습니다. 하나의 속성으로 배열이 있습니다. container 배열에있는 모든 중첩 된 개체 리터럴은 3 개의 인덱스가 있어야합니다. 네 번째로 포함 된 배열을 포함해야합니다. 찾은 컨테이너 배열입니다. 찾았습니다

typeof(array)=='object' returns true; 
arr instanceof Object also returns true; 

다른 개체 리터럴과 함께 컨테이너 배열에 삽입 할 수 없도록 어떻게 배치 할 수 있습니까 ??

enter image description here

var getValue; 
    var parentObj = { 
    parentProp: 10, 
     childObj: { 
      childProp: 20, 
        grandChildObj: { 
         y: { 
          z:'lol', 
          places:['newyork','canada','dhaka'] 
         } 
        } 
       } 
     } 


var arr=[]; 
var container=[]; 
var count=0; 

function getObjNum(obj){ 

     var prop=Object.getOwnPropertyNames(obj); 
     for(i=0;i<prop.length;i++){ 
      if(typeof(obj[prop[i]])=='object'){ 
      container.push(obj[prop[i]]); 
      count++; 
      getObjNum(obj[prop[i]]); 
      } 

     } 
} 
getObjNum(parentObj); 

console.log(container); 
+3

확인 ['배열 .isArray()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)? – Teemu

+2

'arr instanceof Array'는'obj instanceof Array'가'false' 인 동안'true'를 리턴합니다. –

답변

0

으로는 당신이 객체가 배열인지,과 같이 있는지 확인하는 instanceof Array을 사용할 수 있습니다, 의견에서 지적 : 사용하여 배열에 대한

function getChildObjects(obj, returnArr) { 
    return Object.keys(obj).reduce(function (arr, key) { 
     var prop = obj[key]; 
     if (typeof prop === 'object' && !(prop instanceof Array)) { 
      arr.push(prop); 
      arr = getChildObjects(prop, arr); 
     } 
     return arr; 
    }, returnArr || []); 
} 

var parentObj = { 
    parentProp: 10, 
    childObj: { 
     childProp: 20, 
     grandChildObj: { 
      y: { 
       z:'lol', 
       places:['newyork','canada','dhaka'] 
      } 
     } 
    } 
}; 

var childs = getChildObjects(parentObj); 

console.log(childs, childs.length);