关于javascript:检查嵌套密钥是否存在,即使未定义

Check if nested key exists even if undefined

本问题已经有最佳答案,请猛点这里访问。

试图找出编写函数keyExisits的最简单方法,该函数检查和任意嵌套的键,以查看它是否存在于对象中且未定义,而vs不存在。

假定这个对象

1
2
3
4
5
6
7
8
9
var obj = {
  a: {
    b: 1,
    c: {
      d: 2,
      e: undefined
    }
  }
}

在这个对象中,键a.c.e存在,是undefined,键a.c.f不存在。

所以

1
2
keyExists(obj, 'a.c.e') === true
keyExists(obj, 'a.c.f') === false

使用lodash/下划线可以

**更新**

Lodash has的工作原理与此完全相同。


你可以尝试跟踪

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var obj = {a: {b: 1,c: {d: 2,e: undefined}}};

function keyExists(o, key) {
  if(key.includes(".")) {
    let [k, ...rest] = key.split(".");
    return keyExists(o[k], rest.join("."));
  } else if(o) {
    return o.hasOwnProperty(key);
  }
  return false;
}

console.log(keyExists(obj, 'a.c.e') === true)
console.log(keyExists(obj, 'a.c.f') === false)

注:如果key name中有dots或您使用的是[]符号,上述代码将不起作用。