前端面试的时候遇到一道需要现场写代码的题,如下
比如一个数组
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
}
}
}
}
}
【前端面试|JS获取嵌套数组对象中的某个key对应的值】以上就是个人对这个场景题的小总结,继续加油
推荐阅读
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- JS/JavaScript|JS/JavaScript CRC8多项式 16进制
- JS|VUE学习笔记[30-46]
- 腾讯TEG实习|腾讯实习——Vue解决跨域请求
- 地图|高德地图清除指定覆盖物 自定义覆盖物样式(完整dome)
- Pyecharts|Pyecharts 猎聘招聘数据可视化
- flex|C语言-使用goto语句从循环中跳出
- HTML+Js实战项目|在网页中实现icon小图标的几种方法
- js中国标准时间转化为年月日,时间戳