Javascript для цикла через значения JSON - PullRequest
0 голосов
/ 13 июня 2011

У меня есть объект json r:

[ { "id"     : "3443",
    "name"   : "Joe",
    "date1"  : "254",
    "date4"  : "261"
  },
  { "id"     : "50942",
    "name"   : "John",
    "date2"  : "192",
    "date4"  : "195"
  },
  { "id"     : "2524",
    "name"   : "Mary",
    "date1"  : "153",
    "date4"  : "163"
  }
]

, и я хочу иметь цикл Javascript For для просмотра значений dateX.Я знаю, что X находится между 1 и значением Max.

Но следующий код не работает:

for (j=1; j<=Max; j=j+1)
{
  datestring = 'date' + j;
  if (isset(r[i].datestring)) value[j] = r[i].datestring;
  else value[j] = null; 
}

Забыл объяснить, что я определил функцию isset следующим образом:

function isset(variable) {
     return typeof(variable) != "undefined" && variable !== null;
} 

Ответы [ 3 ]

10 голосов
/ 13 июня 2011

Сначала итерируйте массив объектов с помощью обычного цикла for. Затем переберите свойства каждого объекта с помощью for (var p in obj) и проверьте значение p. Что-то вроде:

for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];

    for (var p in obj) {
        if (/^date\d+$/.test(p)) {
            var value = obj[p];
            // p is a dateX property name and value is the value
        }
    }
}

Это нелогично и неэффективно циклически просматривать все возможные значения свойств, чтобы проверить их существование. Вместо этого, просматривайте фактические свойства и проверяйте их имена по вашему шаблону.

3 голосов
/ 13 июня 2011

Вы ищете свойство под названием datestring, когда вы должны делать r[i][datestring] или r[i]['date'+j].Это будет читать значение переменной и искать свойство с таким именем.

1 голос
/ 13 июня 2011

заявление об отказе: если вы пришли сюда в поисках примера циклического прохождения значений JSON в том же методе, который запрашивает исходный плакат, ответ Ates ниже моего - гораздо более лучший метод, пожалуйста, не используйтевот этот.

Я не уверен, почему вы хотите делать все, что вы пытаетесь, потому что вы будете перезаписывать значения в value как сумасшедшие, но вы, вероятно, знаете больше о том, что делаетечем мы делаем, вот рабочий пример, основанный на вашем коде.

var r = [
{
"id":"3443",
"name":"Joe",
"date1":"254",
"date4":"261"
},
{
"id":"50942",
"name":"John",
"date2":"192",
"date4":"195"
},
{
"id":"2524",
"name":"Mary",
"date1":"153",
"date4":"163"
}
];


var max = 10; // guess

var value = {};

for(var i in r)
{
    for (j=0; j<=max; j++)
    {
        datestring = 'date'+j;

        if (undefined != r[i][datestring])
        {
            value[j] = r[i][datestring];
        }
        else
        {
            value[j] = null;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...