前端面试的时候遇到一道需要现场写代码的题,如下
比如一个数组
arr = [
{hr: [ "System Architect", "$3,120", "2011/04/25" ], office: "Edinburgh", "extn": "5421"},
{name:'hongyi'},
[1,2,3]
]
就先按照这个样例来吧,如果我要获取name的值改怎么写一个函数呢
本人能力有限,写的菜或者有不对的地方,还请多多指教
function fin(obj){
if(obj instanceof Array){ //如果类型是数组的话就用数组遍历方法
obj.forEach(function(item,index){
if(item instanceof Object){
fin(item)
}
})
}else if(obj instanceof Object){//如果类型是对象就用对象遍历的方法
for(var key in obj){
if(key instanceof Object){
fin(key)
}else{
if(key=='name'){
console.log(obj[key])
}
}
}
}
}
fin(arr)
下面是优化后的代码,在总的函数里面又写了处理数组和json对象的两个函数,这样感觉代码看起来更有层次,更清晰点吧
function fin(obj,target){
if(obj instanceof Array){
ArrWay(obj,target)
}else{
ObjWay(obj,target)
}
function ArrWay(obj,target){
obj.forEach(function(item,index){
if(item instanceof Object){
fin(item,target)
}
})
}
function ObjWay(obj,target){
for(var key in obj){
if(key instanceof Object){
fin(key,target)
}else{
if(key == target){
console.log(obj[key])
}
}
}
}
}
fin(arr,"name")
其实这道题,当时说找到第一个目标值就可以,所以我也做了一下改进,但是总感觉不太好,目前还没有想到好的办法
var flag = false //在这里加了了flag值进行标注
function fin(obj,target){
if(obj instanceof Array){
ArrWay(obj,target)
}else{
ObjWay(obj,target)
}
function ArrWay(obj,target){
obj.forEach(function(item,index){
if(item instanceof Object){
fin(item,target)
}
})
}
function ObjWay(obj,target){
for(var key in obj){
if(key instanceof Object){
fin(key,target)
}else{
if(key == target&&(!flag)){//然后这里再多加个判断
console.log(obj[key])
flag = true
}
}
}
}
}
以上就是个人对这个场景题的小总结,继续加油