【问题标题】:Check if nested key exists even if undefined [duplicate]即使未定义,也检查嵌套键是否存在[重复]
【发布时间】:2019-02-05 04:40:56
【问题描述】:

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

假设这个对象

var obj = {
  a: {
    b: 1,
    c: {
      d: 2,
      e: undefined
    }
  }
}

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

所以

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

使用 lodash/下划线是可以的

** 更新 **

Lodash has 的工作原理就是这样

【问题讨论】:

  • 不同意,因为这个问题是针对嵌套键的。链接问题的答案不提供解决方案。
  • 这是一个不同的问题。
  • 无论如何,检查这个问题stackoverflow.com/questions/2631001/…
  • @Andrey 它仍然是如何检查密钥是否存在的副本,即使需要实现递归,基本问题是相同的
  • 而lodash有_.has方法lodash.com/docs/4.17.10#has

标签: javascript lodash


【解决方案1】:

你可以试试关注

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 或您使用[] 表示法,上述代码将不起作用。

【讨论】:

  • 在性能方面,加入密钥只是为了再次拆分它似乎适得其反。如果中间键不存在,它也会抛出cannot read property of undefined 错误,即keyExists(obj, 'b.c.e')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多