Определить, есть ли у объекта дочерние объекты в JavaScript - PullRequest
6 голосов
/ 04 мая 2011

В 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 ]

7 голосов
/ 04 мая 2011

Вы можете перебрать все свойства объекта , например, :

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

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

Функция hasOwnProperty() проверяет, существует ли указанное свойство в объекте.Использование в этом контексте гарантирует, что вы не получите никаких унаследованных свойств.

3 голосов
/ 11 февраля 2016

Вы можете рекурсивно перебирать все свойства объекта , например, .

Найдите все конечные узлы, выберите соответствующие входные теги по имени и вставьте в него значение.

Я использовал объект только с двумя уровнями, но его можно использовать с объектом из 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);
0 голосов
/ 04 мая 2011

То, что вы ищете, на самом деле являются объектными ключами. Вы можете проверить, существует ли ключ объекта, вызвав его:

Ваш объект:

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 может быть установлено вручную как неопределенное:

if (obj.hasOwnProperty("prop3")) {
    alert(obj["prop3"])
} else {
    alert('obj key does not exist');
}
0 голосов
/ 04 мая 2011

Это не дети, вы создали ассоциативный массив.

Доступ к ним так:

obj[prop1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...