为什么这个简单的过滤器返回一个空数组?

时间:2017-11-20 08:48:58

标签: javascript arrays filter

我有一个表格数组:

groupTable: {
  data: {
    head: ['name', 'user', 'date'],
    body: [{
      name: 'Group 1',
      user: 'User 3',
      date: '17/10/03'
    }, {
      name: 'Group 2',
      user: 'User 2',
      date: '16/10/01'
    }]
  }
}

我希望能够过滤groupTable.data.body内的对象。我这样做了:

// let's say the term is "7"
const result = this.groupTable.data.body.filter(field => {
    return Object.values(field).every(value => {
        return value.indexOf(term) > -1
    });
});

console.log(result)

在这种情况下,console.log(result)应该返回(如果term = "7"):

[{
    name: 'Group 1',
    user: 'User 3',
    date: '17/10/03'
}]

然而,我得到一个空数组。这是为什么以及如何解决它?

1 个答案:

答案 0 :(得分:1)

正如我上面提到的,不要使用“.every”,因为这意味着它需要所有字段的值来满足该标准。而是使用“.some”。这样,对于任何具有您声明的“术语”的字段,它将返回“true”。如果您只是说出来,Javascript函数是真的可读:“我想过滤数据,其中某些值包含提供的术语”。我认为这不是你想要的:“我想过滤掉每个值包含所提供术语的数据”

// let's say the term is "7"
const result = this.groupTable.data.body.filter(field => {
    return Object.values(field).some(value => {
        return value.indexOf(term) > -1
    });
});

console.log(result)