【问题标题】:want to get a count of repeated values on an array [duplicate]想要获取数组上重复值的计数[重复]
【发布时间】:2021-05-10 07:30:52
【问题描述】:

我是 javascript 的初学者,我想获取数组中重复值的计数

我有一个字符串“aaaaaabbbbbbbcccccccaa”,我希望输出数组类似于 ["a6", "b7", "c7", "a2"];

我打平但失败了。请帮帮我

提前致谢:)

var a = "aaaaaabbbbbbbcccccccaa";

function aa(data){
  var a = [];
  var x = [];
  //var b = data.split("")
//   var b = data.split("").filter((val,key, arr)=>{
//       //console.log(arr.indexOf(val) +" "+ key )
//       return arr.indexOf(val) === key
//   })
  //console.log(b);
  
  for(let i = 0; i<= data.length-1; i++){
    for(let j = 0; j<= data.length-1; j++){
     if(data[i] !== data[j] && x.indexOf(data[i]+""+j) <0){
       x.push(data[i]+""+j);
       a.push(data[i] +""+ j);
       break;
     }
    }
  }
  console.log(x);
  return a;
}

console.log(aa(a));

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    我会使用正则表达式来匹配字符串中的重复字符,然后将它们映射到 match[0] + match.length 以获取该部分的连接子字符串:

    const aa = data => data
      .match(/(.)\1*/g)
      .map(match => match[0] + match.length);
    console.log(aa('aaaaaabbbbbbbcccccccaa'));

    如果您不想使用正则表达式,请不要使用从 0 到字符串长度的嵌套循环 - 而是从 first 循环中计算重复字符,从当前的i 索引开始并递增:

    function aa(data) {
      const result = [];
      for (let i = 0; i < data.length; i++) {
        const char = data[i];
        let matches = 1;
        while (data[i + 1] === char) {
          i++;
          matches++;
        }
        result.push(char + matches);
      }
      return result;
    }
    
    console.log(aa('aaaaaabbbbbbbcccccccaa'));

    【讨论】:

    • 只是好奇....match(/(.)\1*/g) 到底在做什么?
    • (.) 匹配任何字符,并在捕获组中捕获它。 \1 然后反向引用包含该字符的第一个捕获组。 * 量词贪婪地重复前一个标记零次或多次。所以:匹配一个字符,然后尽可能多地匹配同一个字符。
    • 非常感谢...今天学到了一些新东西...
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2021-03-10
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多