Доступ к значению объекта в массиве из json в узле маршрута
Как получить доступ к значению объекта в массиве? Конкретно значение "namecase"? У меня есть представление ejs зацикливание в массиве, так что он может отображать все значения моего объекта. Я передаю данные по маршрутам.
//data.json
{
"works": [{
"company" : "Company 1",
"projects": [{
"namecase":"Projectname 1",
"desc":"This is a project with fairies.",
"img" : "/images/placeholder.jpg",
"url" : "/"
},
{
"namecase":"Projectname 2",
"desc":"This is a project with monsters.",
"img" : "/images/placeholder.jpg",
"url" : "/"
}]
}
]
}
//index.js route
var appdata = require('../data.json');
router.get('/work', function(req, res) {
var myProjects = [];
appdata.works.forEach ( function (item){
//this is where I pull object from json
myProjects = myProjects.concat(item.projects["namecase"]);
});
res.render('work', {
title: 'Work',
projects: myProjects
});
});
///ejs
<% if (projects.length > 0) { %>
<% for (i=0; i<projects.length; i++) { %>
<span><%= projects["namecase"] %></span>
<% }
1 ответ
Решение
То, что вы хотите, чтобы конкат item.projects
, не namecase
ключ, как вы делаете. Кроме того, как только вы в works
объекты projects
дочерний объект, вы захотите пройтись по проектам и затем объединить их, например, так:
router.get('/work', function(req, res) {
var myProjects = [];
appdata.works.forEach(function(work) {
// Loop through each project to prevent undefined indices from being concatenated
work.projects.forEach(function(project) {
myProjects = myProjects.concat(project);
});
});
res.render('work', {
title: 'Work',
projects: myProjects
});
});
Это вернет только проекты:
[ { namecase: 'Projectname 1',
desc: 'This is a project with fairies.',
img: '/images/placeholder.jpg',
url: '/' },
{ namecase: 'Projectname 2',
desc: 'This is a project with monsters.',
img: '/images/placeholder.jpg',
url: '/' } ]