想要获取数组上重复值的计数
我是 javascript 的初学者,我想获取数组中重复值的计数
我有一个字符串“aaaaaabbbbbbbbcccccccaa”,我希望输出数组像 ["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));
回答
我会使用正则表达式来匹配字符串中的重复字符,然后将它们映射到match[0] + match.length该部分的连接子字符串:
const aa = data => data
.match(/(.)1*/g)
.map(match => match[0] + match.length);
console.log(aa('aaaaaabbbbbbbcccccccaa'));
如果您不想使用正则表达式,请不要使用像从 0 到字符串长度这样的嵌套循环 - 相反,从第一个循环内部计算重复字符,从当前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'));