vue.js:过滤不按预期工作

时间:2018-06-10 14:21:18

标签: javascript vuejs2

我正在使用此代码过滤OUT类别以外的任何部分,而不是' 1',' 2'或' 3'但是显示的列表并没有过滤出类似LG' LG'和' NHA'。我使用过滤器不正确?

return this.components.filter((c) => {
    if (c.cat in ['1', '2', '3']) {
        return c;
    }
});

2 个答案:

答案 0 :(得分:2)

JavaScript in operator没有检查数据是否在数组中;它检查对象(或其原型)中是否存在属性名称

要确定某个值是否在数组中,您可以使用现代includes(可以在旧版浏览器上进行多边形填充)方法,或使用较旧的indexOf方法:

if (['1', '2', '3'].includes(c.cat)) {

if (['1', '2', '3'].indexOf(c.cat) != -1) {

对于更复杂的检查,您可以使用some,它允许您使用回调来检查某些内容是否匹配,而不仅仅是进行值匹配。

答案 1 :(得分:2)

filter的回调函数需要bool返回值。您可以使用includes来确定数组是否包含某个元素。

如果您希望过滤components仅包含其他而不是1,2和3的元素,则可以使用!来否定includes结果

let components = [{cat: '1'}, {cat: '2'}, {cat: '3'}, {cat: '4'},{cat: '5'}];
let result = components.filter((c) => {
  return !['1', '2', '3'].includes(c.cat);
});

console.log(result);