请教js中如何判断对象中某个深层次的key是否存在?

例如我最终要获取的值为a.b.c.d.e,在数据结构固定的情况下:

  1. 除了逐级的进行判断,a && a.b && a.b.c && a.b.c.d之外,有没有比较优雅的写法?
  2. 如果其中的某一级为数组,例如我需要a && a.b && a.b.c && a.b.c[0]这种情况
阅读 5.4k
5 个回答

技术上,如果代码中多次出现以下代码,尝试用一个 function 代替。

a && a.b && a.b.c && a.b.c.d

如果没兴趣自己写,那推荐使用 lodash 的 get 函数,https://lodash.com/docs#get

用 es6 的解构赋值

const a = { b: { c: [0] } }
var { b: { c: [d] = [] } = '' } = a // d=0
var { b: { c: [d] = [] } = '' } = {} // d=undefined

在最新的标准中支持可选链操作符和空值合并运算符,可以用如下方式

const a = { b: { c: null } }
const d = a?.b?.c?.[0] ?? 0
console.log(d) // 输出 0
就是最后的?.[0]看起来有点奇怪
var obj = {
   a:{
     b:{
       c:{
         d:{
           e:123
         }
       }
     }
   }
}

function getValue(obj){
   var value;
   for(var x in obj){
     if(obj[x]){
        value = getValue(obj[x])
     }else{
        value = obj[x]; 
     }
   }
   return value;
}

这样?

你这问的太广义了
不过一点就是深层次key存在只能逐级(递归)来做判断

推荐问题
宣传栏