EJS цикл через вложенный массив в resultData - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь получить объект JSON из коллекции Mongo, в которой есть вложенные массивы.Объект plantResult в моей базе данных выглядит следующим образом:

{
    "_id" : ObjectId("5bc97b175c3e221086646b95"),
    "username" : "test-user",
    "tentname" : "Tent1",
    "startdate" : "2018-06-06",
    "notes" : "No notes",
    "vegnutrients" : "grow1,grow2",
    "vegnutrientsvalues" : [
        [
            {
                "_id" : ObjectId("5bc68c91296be70081afdeff"),
                "nutrientname" : "grow",
                "description" : "Test Grow",
                "week1" : 6,
                "week2" : 6,
                "week3" : 12,
                "week4" : 14,
                "week5" : 8,
                "week6" : 0,
                "week7" : 0,
                "week8" : 0,
                "week9" : 0,
                "week10" : 0
            }
        ],
        [ ]
    ],
    "growmedium" : "soil"
}

, и я отображаю страницу с помощью EJS и Express в моем файле маршрутизатора следующим образом:

res.render('viewplant', { username: uname, tentname: tentname, resultData: plantResult } );

, а затем я пытаюсь выполнить итерациючерез результаты и захватите значения week1 для каждого элемента в массиве vegnutrientsvalues, пытаясь это сделать:

<script>
  var vegnutrients = "<%= resultData[0].vegnutrients %>";
  //delimit on comma and add individual nutrients to array
  var finalveg = vegnutrients.split(",");
  for (var i = 0; i < finalveg.length; i++) {
    //WHY CANT IT USE i TO ITERATE THROUGH vegnutrientvalues????
    var finalvnd = "<%= resultData[0].vegnutrientsvalues %>";
    console.log(finalvnd[i][0].week1);
  }
</script>

Но затем консоль читает undefined, а отладчик показывает это:

var finalvnd = "[object Object],";
console.log(finalvnd[i][0].week1);

Но когда я получаю данные напрямую следующим образом:

var finalvnd = "<%= resultData[0].vegnutrientsvalues[0][0].week1 %>";
console.log(finalvnd);

Он записывает правильное значение на консоль, поэтому я знаю, что данные есть, я просто не знаю, как правильно получить к ним доступ,Я хочу использовать i из цикла for в качестве индекса, чтобы получить значение недели1 текущего питательного вещества.Кто-нибудь видит, где я иду не так?

1 Ответ

0 голосов
/ 19 октября 2018

Предполагая, что ваш resultData является массивом.resultData [0] .vegnutrientsvalues ​​Ваш vegnutrientsvalues ​​является вложенным массивом, тогда в этом случае вам нужно сначала выполнить цикл в resultData [0] .vegnutrientsvalues, а затем через каждое значение finalveg [i] .length

 for (var i = 0; i < finalveg.length;  finalvnd = "<%= 
    resultData[0].vegnutrientsvalues %>";
    console.log(finalvnd[i][0].week1);
     <% for (var j = 0; j < finalveg[i].length; j++) {%>
  }
...