let list: Array<string> = ['abc', 'efg', 'abcde', 'eefg'];
我想知道如何检查列表中有多少项包含abc
(计数)。
我知道我可以在循环内使用indexOf
,但是我想知道是否还有其他更简便的方法。
答案 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