在这段代码中,我打算在父对象中找到所有嵌套对象文字。我的嵌套对象之一有一个名为places的数组作为它自己的属性。我有一个名为getObjNum
的递归函数,它遍历每一个property并在父对象中找到嵌套的对象文字。
在我的Parent对象中有三个嵌套的对象文字。其中一个有一个数组作为property.So container
数组,它应该存储所有找到的嵌套对象文字,必须有3个索引。但是数组的位置也是包含为容器数组的第四个索引。我找到了
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);
答案 0 :(得分: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);