let obj = {
key1: 'str1',
key2: {
key3: 'str3'
},
key4: {
key5: {
key6: 'str6',
key7: 'str7'
},
key8: 'str8'
},
key9: 'str9'
};
有这样一个对象,要求封装一个函数,传入对象和某个 value,返回该 value 路径上的 key。比如:searchKeys(obj, 'str3'),得到 'key3, key2'。这是前几天面试时遇到的题,求高手解答
function getKey (obj,value){
for( let key in obj){
if( obj[key] == value ){
return key
}else if ( typeof obj[key] == “object”){
return getKey(obj[key],value)
}
}
应该是这样吧,递归遍历,手机上敲的,没有测试,你自己测一下吧,有问题再回复我。
}
这样写进行测试 console.log(getKey(obj, 'str7')); 会返回 undefined,没有考虑 obj[key] 是其它字符串的情况。我已经知道怎么写了,还是很感谢你的回答~
function searchKeys(obj, value){
for(let key in obj){
if(obj[key] === value){
//找到了 value
return key;
}else{
//不是要找的 value
if(typeof obj[key] === 'object'){
//该值为对象
let temp = searchKeys(obj[key], value);
if(temp){
//temp 不是 undefined,找到了 value
return `${temp}, ${key}`;
}
}
}
};
};