Javascript 如何循环对象键值和嵌套值

Javascript 如何循环对象键值和嵌套值,javascript,Javascript,我不认为“嵌套值”是正确的术语,但我想做的是: 假设我有一个如下所示的对象: { title: 'Foo', content: { top: 'Bar', bottom: 'Baz' } } for (var property in object) { if (object.hasOwnProperty(property)) { // do stuff } } 我想检查title或content.top或

我不认为“嵌套值”是正确的术语,但我想做的是:

假设我有一个如下所示的对象:

{
    title: 'Foo',
    content: {
        top: 'Bar',
        bottom: 'Baz'
    }
}
for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}
我想检查title或content.top或content.bottom是否包含某个字符串

我发现我可以通过如下方式循环对象关键点:

{
    title: 'Foo',
    content: {
        top: 'Bar',
        bottom: 'Baz'
    }
}
for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

但是,如果键本身是一个对象,并且包含其他键,该怎么办?如果这些关键点也是具有不同关键点的对象呢?因此,基本上,是否有一种方法可以以“深度”的方式搜索整个对象,这样无论值“嵌套”的深度有多深,它都会搜索所有值?

嵌套对象形成一个称为树的递归数据结构,并且树可以通过递归函数轻松浏览。递归函数是调用自身的函数,如以下
browse
function:

var树={
答:“阿泽蒂”,
儿童:{
q:“qwerty”
}
};
浏览(树);
函数浏览(树){
for(树中的变量k){
if(isTree(tree[k])){
浏览(树[k]);
}否则{
log(k,tree[k]);
}
}
}
函数isTree(x){
返回Object.prototype.toString.call(x)=“[对象]”;

}
嵌套对象形成一个称为树的递归数据结构,并且可以使用递归函数轻松浏览树。递归函数是调用自身的函数,如以下
browse
function:

var树={
答:“阿泽蒂”,
儿童:{
q:“qwerty”
}
};
浏览(树);
函数浏览(树){
for(树中的变量k){
if(isTree(tree[k])){
浏览(树[k]);
}否则{
log(k,tree[k]);
}
}
}
函数isTree(x){
返回Object.prototype.toString.call(x)=“[对象]”;


}
是否要循环遍历每个值?或者你确切地知道你需要哪一个?如果您知道确切的属性,您可以使用点表示法,例如
myObject.content.top
是的,我确实希望遍历所有的值,因为我正在处理具有不同值的不同对象(它们很多,因此手动添加它们是不实际的),您希望返回什么?并且只找到第一个匹配项?我有一个包含很多对象的数组,并且希望返回另一个数组,其中包含包含特定字符串的所有对象。如果执行一个操作,则有很多解决方案。是否要循环遍历每个值?或者你确切地知道你需要哪一个?如果您知道确切的属性,您可以使用点表示法,例如
myObject.content.top
是的,我确实希望遍历所有的值,因为我正在处理具有不同值的不同对象(它们很多,因此手动添加它们是不实际的),您希望返回什么?并且只找到第一个匹配项?我有一个包含很多对象的数组,并且希望返回另一个数组,其中包含所有包含特定字符串的对象。如果您进行更新,将有很多解决方案!但有一个问题:使用此方法搜索“树”数组,如何返回“顶层”树,而不是嵌套树?如果你知道我的意思,那么,如果我第二次运行browse函数,tree参数会变成tree.child,而不是tree,对吗?我希望在找到匹配项时能够返回树。但是我想我可以通过在传递原始树的函数中添加第二个参数来解决这个问题。基本上,在searchQ函数中,我希望它记录“tree”变量,而不是包含该值的实际树。。这是因为我在一个对象数组中循环,我想返回包含值的对象,而不是树。在这里你可以明白我的意思:。它现在记录{top:“test2”,bottom:“test3”},但我希望它记录我在forEach循环中传递的树。如果我解释得不好,很抱歉。。但是我可以通过添加另一个参数来修复它,所以现在我让它工作:)@Leon好的,我现在明白了。是的,您需要一个附加参数。另一种选择是为每个子级添加一个“parent”属性,以便能够在任何级别访问根。DOM实际上就是这样工作的,请参见
parentNode
属性:。很抱歉多次发布相同的评论,我不得不修正一些不一致之处:-)谢谢更新!但有一个问题:使用此方法搜索“树”数组,如何返回“顶层”树,而不是嵌套树?如果你知道我的意思,那么,如果我第二次运行browse函数,tree参数会变成tree.child,而不是tree,对吗?我希望在找到匹配项时能够返回树。但是我想我可以通过在传递原始树的函数中添加第二个参数来解决这个问题。基本上,在searchQ函数中,我希望它记录“tree”变量,而不是包含该值的实际树。。这是因为我在一个对象数组中循环,我想返回包含值的对象,而不是树。在这里你可以明白我的意思:。它现在记录{top:“test2”,bottom:“test3”},但我希望它记录我在forEach循环中传递的树。如果我解释得不好,很抱歉。。但是我可以通过添加另一个参数来修复它,所以现在我让它工作:)@Leon好的,我现在明白了。是的,您需要一个附加参数。另一种选择是为每个子级添加一个“parent”属性,以便能够在任何级别访问根。DOM实际上就是这样工作的,请参见
parentNode
属性:。很抱歉多次发布相同的评论,我必须纠正一些不一致之处:-)