Как найти количество элементов, содержащих определенную строку, используя метод js filter - PullRequest
0 голосов
/ 31 августа 2018

Я бы хотел найти количество элементов с определенным текстом, используя метод фильтра js.

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

num - это объект;

Теперь я хочу найти количество категорий, в которых есть текст «кошка». Итак, я хочу получить результат 2. Как получить это, используя метод фильтра.

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

вот как вы можете это сделать

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 )
0 голосов
/ 31 августа 2018

Это довольно просто. В ES6 решение будет таким:

const countOfCats = num.filter(entry => entry.category.match('cat')).length;
0 голосов
/ 31 августа 2018

num - это объект;

Верно, но конкретно это массив объект.

Вы могли бы использовать для этого 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...