如果这是一个重复或愚蠢的问题,我很抱歉!
基本上,我需要获取数组中重复值的计数,直到下一个值发生更改。我不能在我的项目中使用reduce(),所以任何普通的JS都会有帮助。
设array = a,b,c,a,d,d;
结果: a:3,b:5,c:3,a:1,d:2
我将不胜感激。
发布于 2021-06-25 11:00:26
您可以使用regex来获得所需的结果。
/([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);
发布于 2021-11-18 14:03:10
只需在chars上循环并检查dict中的char,然后将其递增,否则将其设置为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}发布于 2021-06-25 11:52:29
对数组元素运行迭代。找到下一个不相等的当前角色的位置。然后将这两个索引进行比较,您将找到当前角色连续的最后一个位置。增加迭代次数,这样您就不需要担心多个计数。如果没有发现不相等的字符,那么子数组的大小就是主数组大小的其余部分。
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);https://stackoverflow.com/questions/68124835
复制相似问题