gpt4 book ai didi

JavaScript:在路径未知时检查嵌套对象中是否存在键

转载 作者:行者123 更新时间:2023-11-30 07:49:18 25 4
gpt4 key购买 nike

我正在尝试检查我的对象中是否存在键。

我不知道键具体在何处或在哪个嵌套对象上,我只知道键(或属性)的名称。如果我有一个允许快速搜索对象并确定属性键是否存在于对象中的功能,那将非常方便。

为了说明这一点,我的模拟对象将是这样的:

const testObject = {
one : {
two : {
three : "hello"
}
}
}

我希望查找键是否存在的函数将为 "three""one" 的属性键返回 true >,并且将为 "fooBar"

的键返回 false

我尝试了 hasOwnProperty 方法,但它失败了。

最佳答案

一种方法是使用递归搜索函数,如 doesObjectHaveNestedKey() 如下所示(这不需要像 lodash 那样的额外依赖):

const object = {
some : {
nested : {
property : {
to : [
{
find : {
foo : [ 1 , 2 , 3 ]
}
}
]
}
}
}
}

/* Define function to recursively search for existence of key in obj */
function doesObjectHaveNestedKey(obj, key) {

if(obj === null || obj === undefined) {
return false;
}

for(const k of Object.keys(obj)) {

if(k === key) {
/* Search keys of obj for match and return true if match found */
return true
}
else {
const val = obj[k];

/* If k not a match, try to search it's value. We can search through
object value types, seeing they are capable of containing
objects with keys that might be a match */
if(typeof val === 'object') {

/* Recursivly search for nested key match in nested val */
if(doesObjectHaveNestedKey(val, key) === true) {
return true;
}
}
}
}

return false;
}

console.log('has foo?', doesObjectHaveNestedKey(object, 'foo') ) // True
console.log('has bar?', doesObjectHaveNestedKey(object, 'bar') ) // False
console.log('has nested?', doesObjectHaveNestedKey(object, 'nested') ) // True
console.log('has cat?', doesObjectHaveNestedKey(null, 'cat') ) // False

这里的想法是:

  1. 在输入对象“obj”的键中查找与输入“key”匹配的键“k”
  2. 如果找到匹配则返回真,否则返回
  3. 寻找能够存储嵌套对象的“obj”的任何值“val”(探索“对象”类型,因为只有这些可以存储嵌套键)和
  4. 递归搜索这些类型的“val”以进行匹配,如果找到,则返回 true

关于JavaScript:在路径未知时检查嵌套对象中是否存在键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com