在ExpressAPI的javascript数组中引用子对象
我有一个虚拟数据:在ExpressAPI的javascript数组中引用子对象,javascript,json,node.js,api,express,Javascript,Json,Node.js,Api,Express,我有一个虚拟数据: var data = [{ articles : [{ id : '0', url : 'foo', title : 'Foo', body : 'some foo bar', category : 'foo', tags : [ 'foo' ] }, { id : '1', url : 'fo
var data = [{
articles : [{
id : '0',
url : 'foo',
title : 'Foo',
body : 'some foo bar',
category : 'foo',
tags : [
'foo'
]
}, {
id : '1',
url : 'foo-bar',
title : 'Foo bar',
body : 'more foo bar',
category : 'foo',
tags : [
'foo', 'bar'
]
}, {
id : '2',
url : 'foo-bar-baz',
title : 'Foo bar baz',
body : 'more foo bar baz',
category : 'foo',
tags : [
'foo',
'bar',
'baz'
]
}]
}, {
users : [{
name: 'Admin'
}, {
name: 'User'
}]
}];
我有一个路由器,我只想从文章中请求具有其ID的匹配文章:
// Grab single article
// http://127.0.0.1:3000/api/0
router.get('/:id', function(req, res) {
if(data.length <= req.params.id || req.params.id < 0) {
res.statusCode = 404;
return res.send('Error 404: No quote found');
};
var q = data[req.params.id];
res.json(q);
});
//抓取一篇文章
// http://127.0.0.1:3000/api/0
路由器.get('/:id',函数(req,res){
如果(data.length如果您真的想匹配“id”,而不仅仅是数组中的索引,那么您应该这样做:
var articles = data[0].articles;
var q = articles.filter(function (article) {
return article.id === req.params.id;
});
res.json(q[0]);
如果您确实希望匹配“id”,而不仅仅是数组中的索引,则应执行以下操作:
var articles = data[0].articles;
var q = articles.filter(function (article) {
return article.id === req.params.id;
});
res.json(q[0]);
外部数组中的第0个元素是包含所有项目的对象。首先需要深入到项目数组:数据[0]。项目
。然后,要从数组中仅获取id属性与所需id号匹配的对象,可以使用lo_dash库的\uu.find()
函数
调用类似于:.find(数据[0].articles,{id:req.params.id});
外部数组中的第0个元素是包含所有项目的对象。首先需要深入到articles数组:数据[0].articles
。然后,要从数组中仅获取id属性与所需id号匹配的对象,可以使用lo_dash库的\uu.find()
函数
调用看起来像:.find(数据[0].articles,{id:req.params.id});
尝试数据[0].articles[req.params.id]
尝试数据[0]。articles[req.params.id]
谢谢!这是一个非常好的解决方案!现在我能够定位“url”字段太好了!如何使用/articles/tags/:id
url访问标记这样的嵌套对象?返回article.tags[0]==req.params.id;
仅返回第一篇文章。返回article.tags.some(函数(tagId){return tagId==req.params.id;});
这几乎很好,但一次只返回一个结果。例如,每3篇文章都有标签foo
,但在这种情况下,只会查询第一篇文章。您是这样做的吗?:var articles=data[0]。articles;var qs=articles.filter(函数(文章){return article.tags.some(函数(tagId){return tagId===req.params.id;});});res.json(qs);
谢谢!这是一个非常好的解决方案!现在我也可以将“url”字段作为目标,这很好!如何使用/articles/tags/:id
url?return article.tags[0]访问像标记这样的嵌套对象==req.params.id;
仅返回第一篇文章。返回article.tags.some(函数(tagId){return tagId==req.params.id;});
这几乎很好,但一次只返回一个结果。例如,每3篇文章都有标签foo
,但在这种情况下,只会查询第一篇文章。您是这样做的吗?:var articles=data[0]。articles;var qs=articles.filter(函数(文章){return article.tags.some(函数(tagId){return tagId==req.params.id;});});res.json(qs);