【问题标题】:Referencing child objects in a javascript array for Express API为 Express API 引用 javascript 数组中的子对象
【发布时间】:2016-05-24 06:39:26
【问题描述】:

我有这个虚拟数据:

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);
});

使用以下 URL http://127.0.0.1:3000/api/0 返回文章组但不返回第一篇文章。

感谢您的帮助!

【问题讨论】:

  • 试试data[0].articles[req.params.id]

标签: javascript json node.js api express


【解决方案1】:

如果你真的想匹配“id”而不仅仅是数组中的索引,你应该这样做:

var articles = data[0].articles;
var q = articles.filter(function (article) {
   return article.id === req.params.id;
});

res.json(q[0]);

【讨论】:

  • 谢谢!这是非常好的解决方案!现在我也可以定位“url”字段,这很棒!
  • 如何使用/articles/tags/:id url 访问像tags 这样的嵌套对象? return article.tags[0] === req.params.id;只返回第一篇。
  • return article.tags.some(function(tagId) { return tagId === req.params.id; });
  • 这几乎是好的,但一次只返回一个结果。例如每 3 篇文章都有标签 foo,但这种情况下只会查询第一篇文章。
  • 你是这样做的吗?:var articles = data[0].articles; var qs = articles.filter(function (article) { return article.tags.some(function(tagId) { return tagId === req.params.id;}); }); res.json(qs);
【解决方案2】:

外部数组中的第 0 个元素是包含所有文章的对象。首先,您需要深入到文章数组:data[0].articles。然后,要从数组中获取具有与您需要的 id 号匹配的 id 属性的对象,您可以使用 lo_dash 库的 _.find() 函数。 https://lodash.com/docs#find

调用类似于:_.find(data[0].articles, {id:req.params.id});

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2019-02-26
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多