Javascript按值查找嵌套对象

Javascript按值查找嵌套对象,javascript,pojo,Javascript,Pojo,问题摘要 我仍在学习Javascript,我知道这可能是最基本的,但我遇到了一些麻烦 我有一个包含嵌套对象的对象,我需要检查是否有任何嵌套对象具有与特定值匹配的属性 代码 我想检查下面的对象,看看const eSportsUsername=“Dark”是否存在,并返回一个布尔值 Const object = { Dark: {_id: "5da78b305f0cc7fc44417821", online: false, eSportsUsername: "Dark"}, HighD

问题摘要

我仍在学习Javascript,我知道这可能是最基本的,但我遇到了一些麻烦

我有一个包含嵌套对象的对象,我需要检查是否有任何嵌套对象具有与特定值匹配的属性

代码

我想检查下面的对象,看看const eSportsUsername=“Dark”是否存在,并返回一个布尔值


Const object = {
   Dark: {_id: "5da78b305f0cc7fc44417821", online: false, eSportsUsername: "Dark"},
   HighDistortion: {_id: "5da78b505f0cc7fc44417825", online: false, eSportsUsername: "HighDistortion"}
}


有人能推荐如何实现这一点吗?

您有两个选项来获取值。 点表示法与示例一致 或括号符号

const对象={
黑暗:{u id:“5da78b305f0cc7fc44417821”,在线:false,eSportsUsername:“黑暗”},
高失真:{u id:“5da78b505f0cc7fc44417825”,在线:false,eSportsUsername:“高失真”}
}
log(对象['Dark']['eSportsUsername']);
//或
console.log(object.Dark.eSportsUsername);
//返回布尔值
设布尔=“”;
if(object.Dark.eSportsUsername==“Dark”)
{
布尔=真;
}否则{
布尔=假;
}

log(布尔值)回答

Object.values(object).some(obj => obj.eSportsUsername === "Dark") // will return true if any of the nested object has property with "Dark"
解释

为了做到这一点,你应该

  • 第一:将对象转换为属性值数组
  • 第二:遍历数组以检查元素是否有{eSportsUsername:“Dark”}
第一步是使用。在您的示例中,
Object.values(Object)
将返回

[{eSportsUsername: "Dark", online: false}, {eSportsUsername:"HighDistortion", online: false}]

对于第二步,我们可以使用来迭代数组,并检查是否有任何嵌套对象具有
eSportsUsername
值,因为
“Dark”

使用递归来匹配嵌套对象中的值。这将在有键和无键的情况下工作

如果您想要一个没有递归的解决方案,只需在注释中发布即可

ref:
Array.prototype.entires
Array.prototype.some

const输入={
黑暗:{
_id:“5da78b305f0cc7fc44417821”,
在线:错,
eSportsUsername:“黑暗”
},
高失真:{
_id:“5da78b505f0cc7fc44417825”,
在线:错,
ESPORTSERNAME:“高失真”
}
};
常量isExist=(obj,val,key)=>Object.entries(obj)
.一些([k,v])=>{
如果(v instanceof Object){
//[]对象实例->真
//{}instanceof Object->true
//对象的“abc”实例->错误
//123对象实例->错误
//对象的空实例->假
//未定义的对象实例->false
返回isExist(v,val,key);
}
常数keymatted=!key | | k==key;
返回键匹配&&(v==val);
});
log(isExist(输入'Dark','eSportsUsername');
log(isExist(输入,'high畸变','eSportsUsername');
log(isExist(输入'Dark','unknown');

log(isExist(输入'5da78b305f0cc7fc44417821')
您可以使用
obj.hasOwnProperty('a')
如果存在,只需检查online是否为true只要您的对象不是非常大,递归就是一种方法。您尝试过这种方法吗?我需要检查eSportsUsername是否等于特定字符串,例如eSportsUsername:'Dark'。“那还能用吗?”安德鲁,我已经试过了,我该怎么做?该对象在itI内部有2到100个对象。我相信OP指的是任意嵌套的对象。请小心使用
typeof v===“object”
<代码>空类型
对象