给定这个数组:
[1, 1, 2, 1, 1, 1, 2, 3, 4, 4, 4, 6, 4, 4]
如何有效地计算数组中最近的相同元素,我期望的结果是:
1 => 2,
2 => 1,
1 => 3,
2 => 1,
3 => 1,
4 => 3,
6 => 1,
4 => 2
我不知道如何正确地提出问题,但我认为这个例子很清楚。
我尝试使用 reduce 来使它变得更紧凑和优雅,但我总是得到一个具有数组中相同值总数的值。
let result = testArray.reduce((allValues, value) => {
if(value in allValues){
allValues[value]++;
} else {
allValues[value] = 1;
}
return allValues;
}, {});
最佳答案
您可以检查最后一个元素,如果相等,则递增计数,如果不相等,则将新对象推送到结果集。
var array = [1, 1, 2, 1, 1, 1, 2, 3, 4, 4, 4, 6, 4, 4],
count = array.reduce((r, a, i, aa) => {
if (aa[i - 1] === a) {
r[r.length - 1].count++;
} else {
r.push({ value: a, count: 1 });
}
return r;
}, []);
console.log(count);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 计算 Javascript 数组中相同的最近值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41589646/