如何使用js过滤器方法查找包含特定字符串的项目数

时间:2018-08-31 10:28:09

标签: javascript object filter

我想使用js过滤器方法找到具有特定文字的项目。

var num = 
[
  {
    "name": "name1 ",
    "category": "test"
  },
  {
    "name": " name2",
    "category": "test2"
  },
  {
    "name": "name3",
    "category": "cat3"
  },
  {
    "name": "name 4",
    "category": "cat 4"
  }
];

num是一个对象;

现在,我想查找带有文本“ cat”的类别数。所以我想要结果2。如何使用过滤器方法获得结果。

3 个答案:

答案 0 :(得分:1)

  

num是一个对象;

是的,但具体来说是一个 array 对象。

可以为此使用filter,但是如果您不希望匹配结果数组,则reduce是更合适的选择:

var result = num.reduce(function(sum, entry) => sum + (entry.category.includes("cat") ? 1 : 0), 0);

实时示例:

var num = 
[
  {
    "name": "name1 ",
    "category": "test"
  },
  {
    "name": " name2",
    "category": "test2"
  },
  {
    "name": "name3",
    "category": "cat3"
  },
  {
    "name": "name 4",
    "category": "cat 4"
  }
];
var result = num.reduce(function(sum, entry) {
    return sum + (entry.category.includes("cat") ? 1 : 0);
}, 0);
console.log(result);

或与ES2015 +:

const num = 
[
  {
    "name": "name1 ",
    "category": "test"
  },
  {
    "name": " name2",
    "category": "test2"
  },
  {
    "name": "name3",
    "category": "cat3"
  },
  {
    "name": "name 4",
    "category": "cat 4"
  }
];
const result = num.reduce((sum, entry) => sum + (entry.category.includes("cat") ? 1 : 0), 0);
console.log(result);

或者当然是一个简单的for循环。

答案 1 :(得分:1)

这是您的操作方法

var num = 
[
  {
    "name": "name1 ",
    "category": "test"
  },
  {
    "name": " name2",
    "category": "test2"
  },
  {
    "name": "name3",
    "category": "cat3"
  },
  {
    "name": "name 4",
    "category": "cat 4"
  }
];

console.log( num.filter(i => i.category.indexOf("cat") === 0).length )

答案 2 :(得分:0)

这很简单。在ES6中,解决方案是这样:

const countOfCats = num.filter(entry => entry.category.match('cat')).length;