You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计字符串数组中每个字符串的重复字符并生成独立对象?

问题分析

你的代码核心问题是复用了同一个统计对象obj,所有字符串的字符计数都累积到了同一个对象中,最后只将这个对象推入数组一次,所以得到的是所有字符串的合并统计结果。要实现每个字符串对应独立的统计对象,需要为每个字符串单独初始化统计容器。

修正实现

基础循环版(修复你的原代码)

let ArrOfStrs = ["aaabbbccc", "dddeeefff", "ggghhhiii", "jkl"];
var repeats = [];

for(let i = 0; i < ArrOfStrs.length; i++) {
    // 关键:为每个字符串创建新的统计对象
    var obj = {};
    let str = ArrOfStrs[i];
    for(let x = 0; x < str.length; x++) {
        var l = str.charAt(x);
        obj[l] = obj.hasOwnProperty(l) ? obj[l] + 1 : 1;
    }
    repeats.push(obj);
}
console.log(repeats);

更简洁的ES6+实现

利用map遍历数组生成每个字符串的统计结果,再用reduce完成单字符串的字符计数:

const ArrOfStrs = ["aaabbbccc", "dddeeefff", "ggghhhiii", "jkl"];

const repeats = ArrOfStrs.map(str => 
    [...str].reduce((countObj, char) => {
        countObj[char] = (countObj[char] || 0) + 1;
        return countObj;
    }, {})
);

console.log(repeats);

这段代码的逻辑:

  • ArrOfStrs.map(str => ...):遍历原数组,为每个字符串生成对应的统计对象
  • [...str]:将字符串拆分为字符数组(也可以用str.split(''))
  • reduce((countObj, char) => ..., {}):以空对象为初始值,累加每个字符的出现次数
输出结果

执行后会得到你期望的输出:

[{a:3,b:3,c:3}, {d:3,e:3,f:3},{g:3,h:3,i:3},{j:1,k:1,l:1}]

内容的提问来源于stack exchange,提问作者vamsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:50:45