Как выполнить цикл через массив 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". (Он появляется дважды в моем случае.)
Ответы
Ответ 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/