仅使用嵌套对象字面量填充数组

fill an array only with nested object literals

在这段代码中,我打算在我的嵌套对象的父 object.One 中找到所有嵌套对象文字,它有一个名为 places 的数组作为它自己的数组 property.I 有一个名为 [=12] 的递归函数=] 它遍历每个 属性 并在父对象中找到嵌套的对象文字。

在我的 Parent 对象中有三个嵌套对象 literals.One 其中有一个数组 property.So container 数组应该存储所有找到的嵌套对象文字必须有 3 indexes.But 数组位置也包含为容器的第四个索引 array.I 已找到

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

如何防止将 place 数组与其他对象文字一起插入容器数组?

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);

正如评论中指出的,您可以使用 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);