简体   繁体   English

具有in的js递归函数

[英]js recursive function with for in

There are call function with reqursive in for .. in loop, but something wrong in work. 在for .. in循环中有需要调用的调用函数,但是在工作中出了点问题。 As I think reason in loop but I can not understand why. 正如我认为原因循环,但我不明白为什么。 Help somebody! 帮助别人!

<html>
<head>
    <meta charset="utf-8"> 
    <title>Test html with js tasks</title>
    <script type="text/javascript" src='./2.js'></script>
</head>
<body>
    <script type="text/javascript">
        var objSample = {
            "glossary": {
                "title": "example glossary",
                "GlossDiv": {
                    "title": "S",
                    "GlossList": {
                        "GlossEntry": {
                            "ID": "SGML",
                            "SortAs": "SGML",
                            "GlossTerm": "Standard Generalized Markup Language",
                            "Acronym": "SGML",
                            "Abbrev": "ISO 8879:1986",
                            "GlossDef": {
                                "para": "A meta-markup language, used to create markup languages such as DocBook.",
                                "GlossSeeAlso": ["GML", "XML"]
                            },
                            "GlossSee": "markup"
                        }
                    }
                }
            }
        };
        findProperty(objSample, 'SGML');
    </script>
    Pikabu
</body>
</html>

and source code for 2.js: 和2.js的源代码:

function findProperty(obj, propContentPart) {
    for (var key in obj) {
        var value = obj[key];
        if (typeof value === 'object') {
            if (findProperty(value, propContentPart)) {
                console.log(key);
                return true;
            }
        } else {
            if (value.indexOf(propContentPart) > -1){
                console.log(key);
                return true;
            }
        }
    }
}

output is: 输出为:

ID
GlossEntry
GlossList
GlossDiv
glossary

But expected also SortAs and Acronym. 但也期望SortAs和首字母缩写词。 Why so? 为什么这样?

  1. Be careful when using typeof, for example, using typeof on array gives 'object'. 使用typeof时要小心,例如,在数组上使用typeof会给出“对象”。 I would prefer using instanceof Object for checking if the requester prop is an object. 我更喜欢使用instanceof Object来检查请求者道具是否是一个对象。
  2. indexOf works only for arrays, not for objects. indexOf仅适用于数组,不适用于对象。 To give the expected results, "SortAs": "SGML" and "Acronym": "SGML" should be arrays: "Acronym": ["SGML"] 为了提供预期的结果,“ SortAs”:“ SGML”和“ Acronym”:“ SGML”应为数组:“ Acronym”:[“ SGML”]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM