-1

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

获取数组中的所有非唯一值(即:重复/多次出现)

获取 JavaScript 数组中的所有唯一值(删除重复项)

我使用了上述问题/答案的差异,并尝试根据我正在寻找的内容对其进行修改 - 多次找到的元素数量

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 或其他方法来完成。**我仍然很了解编码所以请尽量不要做任何一个班轮:)我很欣赏效率,但我仍在努力理解逻辑

4

1 回答 1

2

您可以使用减少和过滤

  • 将字符串更改为小写
  • 用''分割字符串
  • 使用每个元素作为键,如果它已经存在,则将其计数增加 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));

于 2019-08-23T02:15:13.600 回答