【问题标题】:Javascript count the duplicate array values until it changesJavascript计算重复的数组值,直到它改变
【发布时间】:2021-06-25 02:53:32
【问题描述】:

对不起,如果这是一个重复或愚蠢的问题!

基本上,我需要获取数组中重复值的计数,直到下一个值发生变化。我不能在我的项目中使用 reduce(),所以任何普通的 JS 都会有帮助。

让数组 = [a,a,a,b,b,b,b,b,c,c,c,a,d,d];

结果: 一个:3, 乙:5, c:3, 一个:1, d:2

非常感谢。

【问题讨论】:

  • 你可以使用forEach
  • {a:3, b:5, c:3, a:1, d:2} 关于字母 a 是不可能的,因为 JS 将覆盖 a:1 并删除 priewer a:3

标签: javascript


【解决方案1】:

您可以使用正则表达式来获得所需的结果。

/([a-z])\1*/gi

let array = ["a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "a", "d", "d"];
const result = array
  .join("")
  .match(/([a-z])\1*/gi)
  .map((s) => `${s[0]}${s.length}`);

console.log(result);

【讨论】:

  • 使用Regex的好方法;但要匹配相同的结果,请尝试执行 Object.fromEntries(result.map(charCount=>[charCount.slice(0,1),charCount.slice(1)])) 但是它将覆盖 a,如 cmets 中提到的那样
【解决方案2】:

chars 上简单地循环 并检查char 是否在dict 然后递增 否则将其设置为1;

let chars =  ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'd', 'd'];
const dic={}
for(char of chars){
    if(char in dic){
        dic[char]++;
    }else{
        dic[char]=1;
    }
}
console.log(dic);//{a: 4, b: 5, c: 3, d: 2}

【讨论】:

    【解决方案3】:

    对数组元素运行迭代。查找下一个不相等的当前字符的位置。然后将两个索引进行差分,您将找到当前字符的连续最后位置。增加迭代次数,这样您就不必担心多次计数。如果没有找到不相等的字符,则子数组的大小是主数组大小的其余部分。

    let ara = ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'a', 'd', 'd'];
    
    let index = 0;
    for (var i = 0; i < ara.length; i++) {
    
        let char = ara[i];
        let size = 0;
    
        let nextIndex = ara.findIndex(
            (a, index) => a !== char && index > i);
        if (nextIndex < 0) {
            size = ara.length - i;
            i = ara.length - 1;
        } else {
            size = nextIndex - i;
            i = nextIndex - 1;
        }
        console.log(char + ' ' + size);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多