我想在对象内找到我想要的属性。
有一个物体。
let obj = {
1: {
2 : {
3: {
4: {
5: {
}
}
},
100: {
}
}
},
6: {
7: {
8: {
}
},
14:{
}
},
11: {
12: {
},
13:{
}
}
}
console.log(obj.hasOwnProperty(1)); // true
console.log(obj.hasOwnProperty(6)); // true
console.log(obj.hasOwnProperty(2)); // false
console.log(obj.hasOwnProperty(3)); // false
当我用2(其他)搜索时,我想获得真实的结果。
我该怎么办?
答案 0 :(得分:4)
您将需要一个递归函数。一种选择是测试some
中的entries
是否具有您要查找的属性,或者条目的值是否是对象,并且该对象通过递归测试:
let obj={1:{2:{3:{4:{5:{}}},100:{}}},6:{7:{8:{}},14:{}},11:{12:{},13:{}}}
function hasNestedProp(obj, findProp) {
findProp = String(findProp);
return Object.entries(obj).some(([key, val]) => {
return (
key === findProp
|| typeof val === 'object' && hasNestedProp(val, findProp)
);
});
}
console.log(hasNestedProp(obj, 1));
console.log(hasNestedProp(obj, 6));
console.log(hasNestedProp(obj, 2));
console.log(hasNestedProp(obj, 3));
console.log(hasNestedProp(obj, 555));
或更简洁地说,如果您改为传入字符串值(毕竟属性始终为 strings ):
let obj={1:{2:{3:{4:{5:{}}},100:{}}},6:{7:{8:{}},14:{}},11:{12:{},13:{}}}
const hasNestedProp = (obj, findProp) => (
Object.entries(obj).some(([key, val]) => (
key === findProp
|| typeof val === 'object' && hasNestedProp(val, findProp)
))
)
console.log(hasNestedProp(obj, '1'));
console.log(hasNestedProp(obj, '6'));
console.log(hasNestedProp(obj, '2'));
console.log(hasNestedProp(obj, '3'));
console.log(hasNestedProp(obj, '555'));
答案 1 :(得分:1)
对于嵌套对象,还需要检查每个子对象。尝试关注
let obj={1:{2:{3:{4:{5:{}}},100:{}}},6:{7:{8:{}},14:{}},11:{12:{},13:{}}}
function hasKey(o, key) {
for(let k in o) {
if(k == key) return true;
else if(typeof o[k] === "object" && hasKey(o[k], key)) return true;
}
return false;
}
console.log(hasKey(obj, 1)); // true
console.log(hasKey(obj, 6)); // true
console.log(hasKey(obj, 2)); // true
console.log(hasKey(obj, 3)); // true
答案 2 :(得分:1)
您可以考虑选择loadash _.get。以下是他们的示例:
Server=mssql;Database=student;User Id=sa;Password=!Abcd123;
答案 3 :(得分:1)
您可以将Object.keys()与Array.prototype.reduce()组合使用
代码:
const obj = {1:{2:{3:{4:{5:{}}},100:{}}},6:{7:{8:{}},14:{}},11:{12:{},13:{}}};
const hasKey = (obj, key) => Object
.keys(obj)
.reduce((a, c) => {
if (c == key || typeof obj[c] === 'object' && hasKey(obj[c], key)) {
a = true;
}
return a;
}, false);
console.log(hasKey(obj, 1));
console.log(hasKey(obj, 6));
console.log(hasKey(obj, 2));
console.log(hasKey(obj, 3));
console.log(hasKey(obj, 555));