Javascript 从传入的字符串中计算重复项

Javascript 从传入的字符串中计算重复项,javascript,Javascript,因此,我在codewars上遇到了这个问题,我必须在传入的字符串中找到相同的字母,并返回该字符串中两倍或更多的字母。以下是我的尝试,它抛出了一个错误: function duplicateCount(text){ text.split('') for(var i = 0, i < text.length, i++) { for(var j = 1, j < text.length + 1, j++) if(text[j] = text[i]) {

因此,我在codewars上遇到了这个问题,我必须在传入的字符串中找到相同的字母,并返回该字符串中两倍或更多的字母。以下是我的尝试,它抛出了一个错误:

function duplicateCount(text){
  text.split('')
  for(var i = 0, i < text.length, i++) {
    for(var j = 1, j < text.length + 1, j++)
      if(text[j] = text[i]) {
        return text[i]
      }
    else return
  }
  //...
}
函数重复计数(文本){
文本分割(“”)
对于(变量i=0,i

我没有什么经验,所以不要太苛刻。你可以试着把字符串数组转换成一个集合。由于集合不能有重复项,因此大小会有所不同。因此,计数

const countDuplicates = (str) => {
    const arr = str.split(''); 
    const arrSet = new Set(arr);
    return arr.length - arrSet.size 
}

console.log(countDuplicates('abcdac')
产出:2

编辑:我错过了你要求返回重复字符的部分。为此:

const getDuplicateChars = (str) => { 

const arr = str.split('');
const duplicateChars = [];
const sortedArr = [...arr].sort();

sortedArr.forEach((elem, index) => {
    if(sortedArr[index+1] === elem) {
        duplicateChars.push(elem);
    }
});
return duplicateChars;
}

let duplicateChars = getDuplicateChars('abcdac');

这里有两种方法可以确定字符串中的哪些字符在该字符串中出现两次或两次以上

了解更多信息:

const str=“我是一个字符串,包含可能重复的字符”;
log(JSON.stringify(duplicateCount(str));
log(duplicateCountLoop(str.join)(;));
//使用减速器/过滤器
函数重复计数(文本){
//确定字符串中每个字符的频率
const charFrequencies=text.split(“”)
.reduce((acc,chr)=>({…acc,[chr]:(acc[chr]| 0)+1}),{});
//过滤结果中包含超过1个眼圈的角色
返回Object.fromEntries(Object.entries(charFrequencies))
.filter(([key,value])=>value>1)
);
}
//循环
函数duplicateCountLoop(文本){
//确定字符串中每个字符的频率
const textIterable=text.split(“”);
让characterFrequencies={};
for(让textIterable的chr){
characterFrequencies[chr]=(characterFrequencies[chr]| | 0)+1;
}
让结果=[];
用于(字符频率中的频率){
if(字符频率[freq]>1){
push(`${freq}:${characterFrequencies[freq]}`);
}
}
返回结果;

}
与标题不同,您的问题正文和代码表示您希望字母出现多次

你的方法有一些问题

text.split(“”)
不会改变原始数组。它只返回一个数组

使用
而不是循环的
中的

在ES6中有一种替代方法

  • 将字符串转换为小写以匹配所有字符,而不考虑大小写。如果要匹配大小写,请删除
    .toLowerCase()
  • 将字符串拆分为数组
  • 将过滤器与条件一起使用
    (x,y)=>str.indexOf(x)!=y) 
    获取重复的元素
  • 由于生成的数组可能有重复的元素,并且您只需要重复的元素,因此我们需要从数组中删除重复的元素
  • 使用带有
    条件(x,y)=>arr.indexOf(x)==y)的过滤器来获取非重复元素
  • 这里,我使用IIFE将第一个过滤数组传递给第二个过滤函数,并直接返回它
  • 如果需要,可以使用
    Set
    代替第二个过滤器
  • duplicateFind=(str)=>{
    str=str.toLowerCase().split(“”);
    返回((arr)=>arr.filter((x,y)=>arr.indexOf(x)==y))(str.filter((x,y)=>str.indexOf(x)!=y))
    }
    log(“字母在字符串“Hello there”中多次出现”);
    log(duplicateFind(“你好”)您可以尝试以下方法:

    let duplicate=text.split('').filter((item, index) => text.split('').indexOf(item) != index)
    

    首先搜索循环语法的
    。其次,搜索赋值
    =
    和比较
    =
    ==
    之间的差异。从那开始。您还可以搜索您的特定问题“查找字符串中的重复字母”,我相信您会在网上找到几十个答案。1。您的
    j
    索引已硬编码为1,应设置为
    i+1
    ,2。第二个for循环的绑定检查应为
    j
    3。使用布尔运算符
    ==
    在if语句中进行比较这是否回答了您的问题?