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

时间:2011-05-04 17:34:06

标签: javascript json parsing

在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);
    }
}

4 个答案:

答案 0 :(得分:7)

您可以迭代对象like this的所有属性:

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

for(var propName in o) {
    if(o.hasOwnProperty(propName)) {
        alert(o[propName]);   
    }
}

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

答案 1 :(得分:3)

您可以递归地迭代对象的所有属性like this

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

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

答案 2 :(得分:0)

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

像这样访问它们:

obj[prop1]

答案 3 :(得分:-3)

您正在寻找的实际上是对象键。您可以通过调用它来检查对象密钥是否存在:

你的对象:

var obj = {
    prop1: 1,
    prop2: 2
}

检查是否未定义:

if (obj.prop3 === undefined) {
    alert('obj key does not exist');
} else {
    alert(obj.prop3);
}

if (obj["prop3"] === undefined) {
    alert('obj key does not exist');
} else {
    alert(obj["prop3"]);
}

或者如果您遇到一个用例,其中obj键的值可能会手动设置为undefined:

if (obj.hasOwnProperty("prop3")) {
    alert(obj["prop3"])
} else {
    alert('obj key does not exist');
}