JavaScript 嵌套属性
JavaScript nested properties
如果我有一个具有嵌套属性的对象。是否有一个函数可以搜索所有属性,以及具有其他对象(也有自己的属性)值的属性等等?
示例对象:
const user = {
id: 101,
email: 'help@stack.com',
info: {
name: 'Please',
address: {
state: 'WX'
}
}
}
在上面的对象中有一种方法我可以简单地调用类似
的东西
console.log(findProp(user, 'state'));
console.log(findProp(user, 'id'));
function findProp(obj, search) {
if(key in obj) return obj[key];
for(const key in obj) {
if(typeof obj[key] === "object" && obj[key] !== null) {
const res = findProp(obj[key], search);
if(res) return res;
}
}
}
你需要的是一个递归函数,它为匹配的键查找嵌套项(对象和数组)(我还添加了一个数组用于查找):
var user = { id: 101, email: 'help@stack.com', info: {name: 'Please', address: {state: 'WX' }, contacts: [{'phone': '00000000'}, {'email': 'aaa@bbb.ccc'}]}}
function keyFinder(object, key) {
if(object.hasOwnProperty(key)) return object[key];
for(let subkey in object) {
if(!object.hasOwnProperty(subkey) || typeof object[subkey] !== "object") continue;
let match = keyFinder(object[subkey], key);
if(match) return match;
}
return null;
}
console.log('id', keyFinder(user, 'id'));
console.log('state', keyFinder(user, 'state'));
console.log('phone', keyFinder(user, 'phone'));
console.log('notexisting', keyFinder(user, 'notexisting'));
Object.hasOwnProperty
防止迭代或检索内置属性。
如果我有一个具有嵌套属性的对象。是否有一个函数可以搜索所有属性,以及具有其他对象(也有自己的属性)值的属性等等?
示例对象:
const user = {
id: 101,
email: 'help@stack.com',
info: {
name: 'Please',
address: {
state: 'WX'
}
}
}
在上面的对象中有一种方法我可以简单地调用类似
的东西console.log(findProp(user, 'state'));
console.log(findProp(user, 'id'));
function findProp(obj, search) {
if(key in obj) return obj[key];
for(const key in obj) {
if(typeof obj[key] === "object" && obj[key] !== null) {
const res = findProp(obj[key], search);
if(res) return res;
}
}
}
你需要的是一个递归函数,它为匹配的键查找嵌套项(对象和数组)(我还添加了一个数组用于查找):
var user = { id: 101, email: 'help@stack.com', info: {name: 'Please', address: {state: 'WX' }, contacts: [{'phone': '00000000'}, {'email': 'aaa@bbb.ccc'}]}}
function keyFinder(object, key) {
if(object.hasOwnProperty(key)) return object[key];
for(let subkey in object) {
if(!object.hasOwnProperty(subkey) || typeof object[subkey] !== "object") continue;
let match = keyFinder(object[subkey], key);
if(match) return match;
}
return null;
}
console.log('id', keyFinder(user, 'id'));
console.log('state', keyFinder(user, 'state'));
console.log('phone', keyFinder(user, 'phone'));
console.log('notexisting', keyFinder(user, 'notexisting'));
Object.hasOwnProperty
防止迭代或检索内置属性。