迭代JSON只会带来最后的结果

时间:2017-01-10 07:31:32

标签: arrays json node.js rss iteration

我在Google快讯中创建了一个提醒,需要解析XML。我正在使用feed-reader模块,我的代码如下:

app.get('/', (req, res) => {
  parse(url).then((rss) => {
    let title,
        link,
        publishedDate,
        contentSnippet = '';
    let json = {};

    rss['entries'].forEach((item) => {
      title = item.title;
      link = item.link.substring(42, item.link.indexOf('&ct='));
      publishedDate = item.publishedDate;
      contentSnippet = item.contentSnippet;
    });

    json = {
      title,
      link,
      publishedDate,
      contentSnippet
    };

    res.send(beautify(json, null, 2, 100));
  }).catch((err) => {
    res.send(err);
  });
});

我想循环遍历"entries"键内的内容。虽然它有效但结果只是最后一个。

此外,如果我将json变量移动到循环内部,则返回的结果为[object Object],但长度合适。

我尝试JSON.stringify,没有区别。

1 个答案:

答案 0 :(得分:1)

此表达式将最后一个entrie的值分配给变量:

rss['entries'].forEach((item) => {
  title = item.title;
  link = item.link.substring(42, item.link.indexOf('&ct='));
  publishedDate = item.publishedDate;
  contentSnippet = item.contentSnippet;
});

然后从最后的值创建json

而是将Array#map条目转换为新数组。每次迭代都应该返回一个对象。

const arr = rss['entries'].map(({ title, link, publishedDate, contentSnippet }) => ({
  title,
  link: link.substring(42, link.indexOf('&ct=')),
  publishedDate,
  contentSnippet
}));