Это рассматриваемая структура данных:
"EditedArticles" : {
"a3" : {
"versions" : [ {
"moment" : "a3",
"question" : "a3",
"situation" : "a3",
"version" : 1
}, ...
]
}
}
В настоящее время я использую три для циклов для доступа к свойствам в EditedArticles.a3.versions
var getArticlesByMoment = function (moment,situation) {
angular.forEach(items, function(article, value) {//items are a1,a2,a3...
angular.forEach(article, function(versions, value) {//versions is the array containing version for each article
var checkfirst=0;
angular.forEach(versions, function(version, value) {//version is the version of an article
checkfirst++;
if (checkfirst == 1 && version.moment == moment && version.situation == situation) {
//do something;
return;
}
})
})
})
}
Я хочу получить доступ к свойствам внутри массива версий для каждого элемента (например, a3), чтобы проверить, имеет ли элемент тот же момент/ситуацию, что и требуемый. Если есть много предметов, a1 - a1000, то я думаю, что это займет много времени. В каждом массиве версий может быть много объектов, но мне нужно только проверить первый объект для подходящего момента и ситуации, так как остальные объекты будут иметь одинаковые значения для этих двух свойств.
Есть ли лучший/быстрый способ доступа к этим свойствам? Я использую вызов http GET для получения всех элементов (например, a3) в EditedArticles.json
спасибо
Вы можете сделать это, чтобы рекурсивно пересекать ваш json-объект:
function traverse(jsonObj) {
if( typeof jsonObj == "object" ) {
$.each(jsonObj, function(k,v) {
// object or array
traverse(v);
});
}
else {
// actual value
}
}
function
->var getArticlesByMoment = function (moment,situation) {
на ваш взгляд (публикуя весь соответствующий код), пожалуйста (возможно, у вас уже есть другие «ключи», так что это будет легко).