检测对象是否在JavaScript中有子项

Der*_*air 7 javascript parsing json

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

var children = xml.childeNodes;
Run Code Online (Sandbox Code Playgroud)

我如何得到一个物体的孩子?

var obj = {
  prop1: 'stuff',
  prop2: 'things',
  prop3: 'stuff-n-things'
}
Run Code Online (Sandbox Code Playgroud)

第二轮

鉴于这样的对象..

var Obj = {
  levelOneProp1: 'stuff',
  levelOneProp2: 'things',
  levelOneProp3: {
     levelTwoProp1: 'moreStuff',
     levelTwoProp2: 'morethings',
     levelTwoProp3: 'morestuff-n-things'
  } 
}
Run Code Online (Sandbox Code Playgroud)

我想知道哪些属性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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*iek 7

您可以迭代对象的所有属性,如下所示:

var o = { prop1: 'this is prop 1', prop2: 'this is prop2'};

for(var propName in o) {
    if(o.hasOwnProperty(propName)) {
        alert(o[propName]);   
    }
}
Run Code Online (Sandbox Code Playgroud)

hasOwnProperty()函数检查以确保指定的属性实际存在于对象中.在此上下文中使用它可确保您不会获得任何继承的属性.


Ped*_*uki 7

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

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

我使用了一个只有两个级别的对象,但它可以与 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);
Run Code Online (Sandbox Code Playgroud)


Por*_*rco 0

那些不是孩子,您已经创建了一个关联数组。

像这样访问它们:

obj[prop1]
Run Code Online (Sandbox Code Playgroud)