通过重复处理来优化函数代码

时间:2019-07-31 10:03:23

标签: angular

我具有此功能,用于获取选定类别的新闻。首先进行if case测试,确定类别是否确实在类别的数组中,以及是否不是'All'类型,然后将类别的新闻推送到getNewsByCategory中。第二个if case测试类别是否为'All'类型,并将所有类别的新内容推送到getNewsByCategory中。

如果您在两种情况下都注意到有相同的代码,我想对其进行优化

  getNewsByCategory(category) {
    const getNewsByCategory = [];
    if (this.newsCategory) {
      this.newsCategory.forEach(element => {
        if (element.category === category && category !== 'All') {
          element.news.filter(n => {
            getNewsByCategory.push(n);
          });
        } else if (category === 'All') {
          element.news.filter(n => {
            getNewsByCategory.push(n);
          });
        }
      });
      return getNewsByCategory;
    }
  }

2 个答案:

答案 0 :(得分:2)

这是这两个if的组合:

if (element.category === category || category === 'All')

答案 1 :(得分:1)

尝试使用reduce函数,我认为您正在误用filter函数,因为它应该与返回的布尔值一起使用,以便创建仅包含以下值的新数组符合条件。 另外,您可以在push函数中使用散布运算符(...)来推送所有element.news。
无论如何:

  getNewsByCategory(category) {
    if (this.newsCategory) {
      return this.newsCategory.reduce(
        (newsByCategory, element) => (element.category === category || category === 'All') && newsByCategory.push(...element.news),
        []
      );
    }
  }