即使未定义,也检查嵌套键是不是存在[重复]
Posted
技术标签:
【中文标题】即使未定义,也检查嵌套键是不是存在[重复]【英文标题】: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
的工作原理就是这样
【问题讨论】:
不同意,因为这个问题是针对嵌套键的。链接问题的答案不提供解决方案。 这是一个不同的问题。 无论如何,检查这个问题***.com/questions/2631001/… @Andrey 它仍然是如何检查密钥是否存在的副本,即使需要实现递归,基本问题是相同的 而lodash有_.has
方法lodash.com/docs/4.17.10#has
【参考方案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')
。以上是关于即使未定义,也检查嵌套键是不是存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章