非法使用过滤器打字稿

时间:2019-01-02 12:06:03

标签: angular typescript

我正在搜索对象数组。如果item的状态代码为1,我要推送到openIssue,如果它是3,则要推送到inProgressIssue

下面是我的代码:

openIssue = [];
inProgressIssue = [];
issuesNotCompletedInCurrentSprint.filter((item) => {
  if (item.statusId === '1') {
    openIssue.push(item);
  } else if (item.statusId === '3') {
    inProgressIssue.push(item);
  }
});

我收到一个代码审查评论:

  

非法使用过滤器

请告诉我我在做什么错了。

5 个答案:

答案 0 :(得分:0)

您会收到错误消息,因为filter方法希望您返回布尔值。在这种情况下,您应该使用forEach方法。

答案 1 :(得分:0)

您收到了该错误,因为过滤器希望您返回布尔值,过滤器始终会这样做。是的,filter是一个迭代,但是返回值应为布尔值,这就是它的实现方式, 我建议您使用这样的过滤器,这非常简单。您也可以使用foreach,它不会返回任何内容。

openIssue = issuesNotCompletedInCurrentSprint.filter(a => a.statusId === '1');
inProgressIssue = issuesNotCompletedInCurrentSprint.filter(a => a.statusId === '3');

此处filter将返回statusid并还原合适的值

let issuesNotCompletedInCurrentSprint = [{
  statusId: '1',
  name: 'asfadsf'
}, {
  statusId: '2',
  name: 'asfadsf11'
}, {
  statusId: '3',
  name: 'asfadsf6636'
}];
let openIssue = [];
let inProgressIssue = []
openIssue = issuesNotCompletedInCurrentSprint.filter(a => a.statusId === '1');
inProgressIssue = issuesNotCompletedInCurrentSprint.filter(a => a.statusId === '3');

console.log('open', openIssue, 'inprogress', inProgressIssue)

答案 2 :(得分:0)

使用forEach如下:

inProgressIssue = [];

issuesNotCompletedInCurrentSprint.forEach(item => {
  if (item.statusId === '1') {
    openIssue.push(item);
  } else if (item.statusId === '3') {
    inProgressIssue.push(item);
  }
});

答案 3 :(得分:0)

使用for循环进行简单搜索,

    openIssue = [];
    inProgressIssue = []
    for(let item of issuesNotCompletedInCurrentSprint){
        if (item.statusId === '1') {
            openIssue.push(item);
        } else if (item.statusId === '3') {
            inProgressIssue.push(item);
        }
    };

答案 4 :(得分:0)

过滤器需要返回一个布尔值,因为它要求过滤条件。还会创建一个新的数组。

您可以像这样简单地重写以使用过滤器:

openIssue = issuesNotCompletedInCurrentSprint.filter(item => item.statusId === '1');

inProgressIssue = issuesNotCompletedInCurrentSprint.filter(item => item.statusId === '3');