列表中有多少个项目包含一个单词

时间:2019-06-19 14:40:48

标签: javascript typescript

let list: Array<string> = ['abc', 'efg', 'abcde', 'eefg'];

我想知道如何检查列表中有多少项包含abc(计数)。

我知道我可以在循环内使用indexOf,但是我想知道是否还有其他更简便的方法。

3 个答案:

答案 0 :(得分:3)

这是reduce()的解决方案

const list = ['abc', 'efg', 'abcde', 'eefg']

const countReduce = list.reduce((count, item) => {
  return count += item.includes('abc') ? 1 : 0
}, 0)

console.log('reduce:', countReduce)

这是带有正则表达式的一个:

const list = ['abc', 'efg', 'abcde', 'eefg']

const count = (list.join(',').match(/abc/g) || []).length;

console.log(count);

还有一个字符串连接样式:

const list = ['abc', 'efg', 'abcde', 'eefg']

const count = list.join(',').split('abc').length - 1

console.log(count);

稍微复杂一点-将字符串作为数组(而不使用indexOf ... :))

const list = ['abc', 'efg', 'abcdeabc', 'eefg']

let count = 0

for (let item of list) {
  let onlyOnce = 0 // guarding that the string is counted inly once/item
  const length = item.length
  for (let i = 0; i < length; i++) {
    if (item[i] + item[i + 1] + item[i + 2] == 'abc' && !onlyOnce) {
      count++
      onlyOnce++
    }
  }
}

console.log(count)

答案 1 :(得分:2)

一种简单的方法是过滤列表并获取长度:

let count = list.filter(s => s.includes(word)).length;

使用indexOf

let count = list.filter(s => s.indexOf(word) > -1).length;

答案 2 :(得分:1)

尝试一下

function isEqualTo(value) {
  return value.includes("abc"); // or return value == "abc";  // whatever you want
}
var words = list.filter(isEqualTo).length