在 JavaScript 中检测一个对象是否有子对象

新手上路,请多包涵

在 JavaScript 中,您可以像这样获取 XML 节点的子节点…

 var children = xml.childeNodes;

我如何获得一个对象的孩子?

 var obj = {
  prop1: 'stuff',
  prop2: 'things',
  prop3: 'stuff-n-things'
}


第二轮

给定一个这样的对象..

 var Obj = {
  levelOneProp1: 'stuff',
  levelOneProp2: 'things',
  levelOneProp3: {
     levelTwoProp1: 'moreStuff',
     levelTwoProp2: 'morethings',
     levelTwoProp3: 'morestuff-n-things'
  }
}

我想知道 Obj 中的哪些属性有子项,以便我可以以递归方式遍历它们。目标是能够为数据集提供(理论上)无限数量的子项,并将它们的值应用于输入元素……这是我目前所拥有的。

 function applyData( dataSet ){
    var hasChildren = false;

    for(var i = 0; i < dataSet.childNodeArrayGoesHere.length; i++){
        if(dataSet.detectChildNodesHere){
            hasChildren = true;
        }
    }

    if(hasChildren){
        for(var j = 0; j < dataSet.childNodeArrayGoesHere.length; i++){
            applyData(dataSet[j]);
        }
    } else {
        //apply the key/value pair to an input element

        $("input[name" + dataSet.propertyName + "]").val(dataSet.propertyValue);
    }
}

原文由 Derek Adair 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 299
1 个回答

您可以 像这样 递归地遍历对象的所有属性。

找到所有的结束节点,通过名称选择对应的输入标签,并将值放入其中。

我使用了一个只有两层的对象,但它可以用于 n 层的对象。

 var Obj = {
          id1: 'stuff',
          id2: 'things',
          id3: {
              levelTwo1: 'moreStuff',
              levelTwo2: 'morethings',
              levelTwo3: 'morestuff-n-things'
          }
      }

function addAttributeInput(obj) {
    for (var o in obj) {
        if (typeof obj[o] == "object") {
            addAttributeInput(obj[o]);
        } else {
            $("input[name='" + o + "']").val(obj[o]);
        }
    }
}

addAttributeInput(Obj);

原文由 PedroSouki 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题