我需要获取字符串中指定的一组重复单词的计数。
我可以返回一个单词的出现,但我卡在多个单词中。
const sData = 'am=1&am=2&pm=1&pm=2&pm=3&ac=1&dc=1';
const aData = sData.split('&');
const nData = aData.filter(el => el.includes('am')).length;
这返回预期的2
,但是我需要对pm
,ac
和dc
进行同样的操作,据我了解,includes
不接受多个值。
答案 0 :(得分:2)
您可以使用功能!
const countOccurrencesOf = (word, search) => {
return word.filter(el => el.includes(search)).length;
};
现在,您可以重复使用此功能来满足其他所有查找字符串的需求:
countOccurrencesOf(aData, 'pm');
countOccurrencesOf(aData, 'ac');
countOccurrencesOf(aData, 'dc');
答案 1 :(得分:1)
您正在寻找的是递归函数。在您提供的示例中,我假设您正在解析URL查询变量。因此,让我们假设以下是您的分隔符:&或=。
此功能可以大致了解您想要达到的目标。
function containsDuplicates(string,delimiter,foundDuplicates){
var str = string.split(delimiter);
if(foundDuplicates.includes(str)){
return true;
}else if(string.indexOf(str) < string.length){
foundDuplicates.push(str);
return containsDuplicates(string,delimiter,foundDuplicates);
}
else{
return false;
}
}
答案 2 :(得分:1)
尝试改用地图:
const sData = 'am=1&am=2&pm=1&pm=2&pm=3&ac=1&dc=1';
const aData = sData.split('&');
// define the stings you want to count
const nData = {am: 0, pm: 0, ac: 0}
// iterate over the split input data
const val = aData.map((obj) => {
// iterate over the nData
Object.keys(nData).forEach((count) => {
// if the input contains the count, add to the count
if (obj.includes(count)) nData[count]++;
})
})
console.log(nData); // returns: { am: 2, pm: 3, ac: 1 }
减少可能也会起作用!
答案 3 :(得分:1)
|
分隔单词来创建正则表达式。 match
获取指定关键字的所有匹配项。 counter
对象。遍历匹配数组并计算每次出现的次数
const str = 'am=1&am=2&pm=1&pm=2&pm=3&ac=1&dc=1',
toFind = ['am', 'pm', 'ac'],
regex = new RegExp(toFind.join("|"), "g"),
matches = str.match(regex);
console.log(matches)
const counter = {};
matches.forEach(m => counter[m] = counter[m] + 1 || 1)
console.log(counter)
.as-console-wrapper { max-height: 100% !important; top: 0; }