зациклить объект JS - PullRequest
       5

зациклить объект JS

1 голос
/ 15 января 2012

У меня есть этот объект JS:

{
    "data": {
        "nid": [{
            "cid": "32",
            "uid": "780",
            "comment": "text"
        }]
    },
    "request_status": "found"
}

как я могу просмотреть эти элементы, чтобы получить значение комментария ("comment": "text")?

Ответы [ 3 ]

3 голосов
/ 15 января 2012

Вам не нужно зацикливаться, чтобы получить это. Просто сделай ...

var obj = {"data":{"nid":[{"cid":"32","uid":"780","comment":"text"}]},"request_status":"found"};

var text = obj.data.nid[0].comment;

Или, если их несколько, вы можете использовать forEach ...

obj.data.nid.forEach(function(val,i) {
    alert( val.comment );
});

Или традиционная for петля ...

for( var i = 0; i < obj.data.nid.length; i++ ) {
    alert( obj.data.nid[i].comment );
}

Или, если вы хотите построить массив, используйте map ...

var arr = obj.data.nid.map(function(val,i) {
    return val.comment;
});

Или опять традиционный for цикл ...

var arr = []
for( var i = 0; i < obj.data.nid.length; i++ ) {
    arr.push( obj.data.nid[i].comment );
}
1 голос
/ 15 января 2012

Дано:

var obj = {
    "data": {
        "nid": [{
            "cid": "32",
            "uid": "780",
            "comment": "text"
        }]
    },
    "request_status": "found"
};

Прямой способ получить комментарий:

obj["data"]["nid"][0]["comment"]
// or
obj.data.nid[0].comment

Что касается "циклического прохождения" по элементам для получения значения, я не уверен, что цикл имеет смысл. Вы говорите, что можете не знать структуру объекта, но знаете, что где-то там будет поле «комментарий»?

В массиве "nid" есть только один элемент - если это был просто пример, но на самом деле у вас будет массив с большим количеством значений, вы можете просмотреть этот массив:

var nid = obj["data"]["nid"], // get a direct reference to the array to save
    i;                        // repeating obj.data.nid everywhere
for (i=0; i < nid.length; i++) {
   // do something with the comment in the current item
   console.log(nid[i]["comment"]);
}
1 голос
/ 15 января 2012

Если вы просто ссылаетесь на этот конкретный объект (или если каждый объект, с которым вы работаете, следует тому же шаблону), то вы можете просто получить доступ к значению напрямую:

var theObj = {"data":{"nid":[{"cid":"32","uid":"780","comment":"text"}]},"request_status":"found"};
alert(theObj.data.nid[0].comment);

Если вы хотите сделать что-то итеративное, то, возможно, попробуйте это:

var theObj = {"data":{"nid":[{"cid":"32","uid":"780","comment":"text"}]},"request_status":"found"};
for (var index = 0; index < theObj.data.nid.length; index++) {
    var item = theObj.data.nid[index];
    if (item.comment) {
        alert(item.comment);
    }
}

Или, если вы действительно хотите сделать весь итеративно:

window.searchObj = function(theObj) {
    if (theObj.comment) {
        alert(theObj.comment);
    }
    if (theObj instanceof Array) {
        searchArray (theObj);
    }
    else if (theObj instanceof Object) {
        for (var key in theObj) {
            searchObj(theObj[key]);
        }
    }
};

window.searchArray = function(theArray) {
    for (var index = 0; index < theArray.length; index++) {
        var item = theArray[index];
        searchObj(item);
    }
};

var theObj = {"data":{"nid":[{"cid":"32","uid":"780","comment":"text"}]},"request_status":"found"};
searchObj(theObj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...