Есть ли лучший способ перебрать эту структуру данных JSON?

0

Это рассматриваемая структура данных:

"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

спасибо

  • 0
    Покажите нам, как вы вызываете эту function -> var getArticlesByMoment = function (moment,situation) { на ваш взгляд (публикуя весь соответствующий код), пожалуйста (возможно, у вас уже есть другие «ключи», так что это будет легко).
Теги:
nested-loops

1 ответ

0

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

function traverse(jsonObj) {
    if( typeof jsonObj == "object" ) {
        $.each(jsonObj, function(k,v) {
            // object or array
            traverse(v);
        });
    }
    else {
        // actual value
    }
}
  • 0
    Ну, как вы могли заметить, вопрос не помечен как jQuery.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню