返回重复计数

时间:2019-08-23 02:08:44

标签: javascript arrays methods callback

提示:编写一个函数,该函数将返回在输入字符串中多次出现的不区分大小写的字母字符和数字的计数。可以假定输入字符串仅包含字母(大写和小写)和数字。

Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array

Get all unique values in a JavaScript array (remove duplicates)

我使用了上述问题/答案的方差,并尝试针对我正在寻找的内容进行修改-一次发现了多少个元素的计数

var arr = 'Indivisibilities';
var sorted_arr = arr.toLowerCase().split('').sort();

let count = 0;

let duplicateCount = (parm1) => {
for (var i = 0; i < sorted_arr.length - 1; i++) {
    if (sorted_arr[i + 1] == sorted_arr[i]) {
        count ++;
    }
} return count;
}

duplicateCount(arr);

计数返回7,期望的是2。另外,我真的很想避免使用for循环。我希望可以使用.forEach或某种方法来完成此操作。 **我仍然非常了解编码,所以请尽量不要做任何事情:)我很感谢效率,但是我仍在尝试理解逻辑

1 个答案:

答案 0 :(得分:2)

您可以使用reduce和filter

  • 将字符串更改为小写
  • 用''分隔字符串
  • 将每个元素用作键,如果已经存在,则将其增加1,否则将其设置为1
  • 过滤大于1的值以查看重复项
  • 获取过滤后的数组的长度

var str = 'Indivisibilities';

let duplicateCount = (str) => {
  let dups = str.toLowerCase().split('').reduce((op,inp)=>{
    op[inp] = op[inp] || 0
    op[inp]++
    return op
  },{})
  return Object.values(dups).filter(v=>v>1).length
}

console.log(duplicateCount(str));