Javascript 如果对象为';s键存在于嵌套对象和数组中
我尝试使用Javascript 如果对象为';s键存在于嵌套对象和数组中,javascript,object,Javascript,Object,我尝试使用if(key in object)语句来获取对象中是否存在键,但是我注意到它只适用于对象的第一级,如下所示: myObject = { name: 'Bob', age: 20, dog: true } myObject = { name: 'Joe', favorites: { ice_cream: 'vanilla', coffee: 'espresso' } } 但是,它似乎不适用于这样的嵌套对象: myObject = { nam
if(key in object)
语句来获取对象中是否存在键,但是我注意到它只适用于对象的第一级,如下所示:
myObject = {
name: 'Bob',
age: 20,
dog: true
}
myObject = {
name: 'Joe',
favorites: {
ice_cream: 'vanilla',
coffee: 'espresso'
}
}
但是,它似乎不适用于这样的嵌套对象:
myObject = {
name: 'Bob',
age: 20,
dog: true
}
myObject = {
name: 'Joe',
favorites: {
ice_cream: 'vanilla',
coffee: 'espresso'
}
}
如果我运行
console.log('coffee'在myObject中)
,它将返回false。我也尝试过使用myObject.hasOwnProperty(“coffee”)
,但是它仍然返回false。如果您真的希望能够递归地检查该键是否存在于对象中的任何位置,则需要一个递归函数
const myObject={
名字:'乔',
收藏夹:{
冰淇淋:“香草”,
咖啡:“浓缩咖啡”
}
};
const getKeys=(obj,keys=[],visted=new Set())=>{
如果(访问过的对象)返回;
添加(obj);
keys.push(…Object.keys(obj));
for(对象值的常量值(obj)){
if(val&&typeof val=='object'){
获取密钥(val、密钥、已访问);
}
}
返回键;
};
log(getKeys(myObject));
log(getKeys(myObject).包括('coffee')代码>你可以试试这个
function getKey(obj) {
let objectKeys = [];
let keyValues = Object.entries(obj);
for (let i in keyValues) {
objectKeys.push(keyValues[i][0]);
if (typeof keyValues[i][1] == "object") {
var keys = getKey(keyValues[i][1])
objectKeys = objectKeys.concat(keys);
}
}
return objectKeys;
}
您可以将键传递给函数并检查
let key = getKey(coffee);
console.log(key);
这回答了你的问题吗?您认为检查密钥是否存在的最佳方法是什么?我正在处理一个相当大的对象,它是Minecraft中一个项目的解码NBT,不同的项目有不同的字段,所以我不能只写对每个项目都有效的相同的东西。事先弄清楚对象的结构可以是什么样的,这样你就可以直接找到你想要找到的可能属性。这可能涉及数组或对象方法-这很好-但在整个对象上一直迭代是对输入了解不够的标志。