使用 for 循环计算字符串中所有字符的出现次数,并将结果输出到 Javascript 中的对象

Count the number of occurrences of all characters in a string with a for loop and output the result to an object in Javascript

提问人:Ubeydullah Keleş 提问时间:6/9/2023 更新时间:6/12/2023 访问量:92

问:

如何遍历字符串中的所有字符并计算每个字符的出现次数并用结果填充对象? 我在 Codewars 上遇到了这个问题,但在 stackoverflow 上没有找到专门以这种方式构建的答案,所以我想分享我的解决方案。我希望这对那里的人有所帮助。

输入示例:“Apple” 输出: {A: 1, p: 2, l: 1, e: 1}

在开发我的解决方案时,我需要了解如何使用 for 循环创建动态对象。因此,我发现这特别有用:

https://stackoverflow.com/a/69328904/13200699

但是,后来我不得不对它做一些补充,因为我的挑战与此有点不同。最后,我想出了下面的解决方案;

JavaScript 字符串 for 循环 对象 字符

评论

1赞 Andy 6/9/2023
欢迎来到 SO。但是,此站点不适合共享您编写的工作代码。这是一个帮助开发人员解决他们在代码中遇到的特定问题的网站。特别是因为这已经解决了(可能)许多重复项的问题。

答:

0赞 Ubeydullah Keleş 6/9/2023 #1

这是我开发的解决方案:

const string = "Apple"
let obj = {}

for( let i = 0 ;i < string.length ;i++) {
    //variable counting occurrence
    let count = 0;
    for(let j = 0 ;j < string.length ;j++) {
        if( string[i] == string[j] && i > j  ) {
        break;
        }
        if(string[i] == string[j]) {
        count++;
        obj[string[i]] = count // This is where I am populating the object.
        }
    }
}

console.log(obj)
1赞 Ognjen Stefanovic 6/9/2023 #2

你可以像这样更优雅地做到这一点,使用 reducer:

const string = "Apple";

let obj = string.split('').reduce((acc, char) => {
  acc[char] = (acc[char] || 0) + 1;
  return acc;
}, {});

console.log(obj);

评论

0赞 Ubeydullah Keleş 6/10/2023
嗨,Ognjen。感谢您的贡献。但是,不幸的是,我无法让你的代码工作。我不知道它有什么不对,但是,它没有返回预期的结果:{A:1,p:2,l:1,e:1} PS。我在代码的开头添加了“let obj = {}”,但它仍然不起作用。
0赞 Ognjen Stefanovic 6/12/2023
对不起,这个错误。这是工作代码。
0赞 Ubeydullah Keleş 6/12/2023
谢谢。您能详细说明一下代码吗?尤其是四线;acc[char] = (acc[char] || 0) + 1;
1赞 Ognjen Stefanovic 6/12/2023
您可以在此处阅读有关减速机的更多信息: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...reducer 中的第二个参数是初始值,在本例中为空对象。因此,最初,由于它是空的,因此没有定义的键。第 4 行是增量代码:如果它是字符的第一次出现,则 acc[char] 是未定义的,因此我们将 0 作为值,并且在所有其他外观中,该值将被定义,因此我们只需递增该数字,并返回整个对象以进行 reducer 的下一次迭代。{ }
1赞 Ognjen Stefanovic 6/12/2023
acc[char] = (acc[char] || 0) + 1 这个运算符 () 正在使用所谓的短路,你可以在这里阅读更多关于它的信息: codeburst.io/...OR||