Подтвердить что ты не робот

Как выполнить цикл через массив JSON?

У меня есть JSON-код с несколькими объектами в нем:

[
    {
        "MNGR_NAME": "Mark",
        "MGR_ID": "M44",
        "EMP_ID": "1849"
    },
    {
        "MNGR_NAME": "Steve",
        "PROJ_ID": "88421",
        "PROJ_NAME": "ABC",
        "PROJ_ALLOC_NO": "49"
    }
]

Мой фрагмент цикла JSON:

function ServiceSucceeded(result) 
{       
  for(var x=0; x<result.length; x++) 
  {      

  }    
}

Не могли бы вы дать мне знать, как проверить, нет ли в массиве "MNGR_NAME". (Он появляется дважды в моем случае.)

4b9b3361

Ответ 1

Вам нужно получить доступ к объекту result на итерации.

for (var key in result)
{
   if (result.hasOwnProperty(key))
   {
      // here you have access to
      var MNGR_NAME = result[key].MNGR_NAME;
      var MGR_ID = result[key].MGR_ID;
   }
}

Ответ 2

Вы можете использовать jQuery $. each:

    var exists = false;

    $.each(arr, function(index, obj){
       if(typeof(obj.MNGR_NAME) !== 'undefined'){
          exists = true;
          return false;
       }
    });

    alert('Does a manager exists? ' + exists);

Возврат false приведет к поломке каждого из них, поэтому, когда один менеджер встретится, итерация остановится.

Ответ 3

Обратите внимание, что ваш объект представляет собой массив объектов JavaScript. Не могли бы вы использовать что-то вроде этого?

var array = [{
    "MNGR_NAME": "Mark",
    "MGR_ID": "M44",
    "EMP_ID": "1849"
},
{
    "MNGR_NAME": "Steve",
    "PROJ_ID": "88421",
    "PROJ_NAME": "ABC",
    "PROJ_ALLOC_NO": "49"
}];

var numberOfMngrName = 0;
for(var i=0;i<array.length;i++){
    if(array[i].MNGR_NAME != null){
        numberOfMngrName++;
    }
}

console.log(numberOfMngrName);

Ответ 4

Это найдет количество вхождений ключа MNGR_NAME в ваш Object Array:

var numMngrName = 0;

$.each(json, function () {
    // 'this' is the Object you are iterating over
    if (this.MNGR_NAME !== undefined) {
        numMngrName++;
    }
});

Ответ 5

Внутри цикла result[x] находится объект, поэтому, если вы хотите подсчитать элемент, который может или не может присутствовать,

function ServiceSucceeded(result)
{
  var managers = 0
  for(var x=0; x<result.length; x++)
  {
        if (typeof result[x].MNGR_NAME !== "undefined")
            managers++;
  }
  alert(managers);
}

Ответ 6

Вы можете использовать $.each или $.grep, если вы также хотите получить элементы, которые содержат атрибут.

filtered = $.grep(result, function(value) {
    return (value["MNGR_NAME"] !== undefined)
});
count = filtered.length

Ответ 7

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

var count = 0;
var i;
for(i = 0; i < jsonObj.length; i += 1) {
    if(jsonObj[i]["MNGR_NAME"]) {
        count++;
    }
}

Рабочий пример: http://jsfiddle.net/j3fbQ/