javascript - 计算 Javascript 数组中相同的最近值

标签 javascript arrays ecmascript-6

给定这个数组:

[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/

相关文章:

node.js - NodeJS 中的多个 await 调用错误处理

浏览器上的 JavaScript 模块

javascript - NodeJS promise 不重置

javascript - 构建库并包含 CSS 文件,但不包含测试文件

javascript - 填充 x 标签会影响 Flot 中堆积条形图的颜色

javascript - 如何重复 123 1231 直到长度目标

javascript - setTimeout 在 "for loop"内无法正常工作

javascript - 其他内置类型的类似方法,如 Array.IsArray

java - 如何在java中显示正确的数组

javascript - 通过 ids 匹配 2 个数组(用户[用户 id 作为键]到订单[订单 ids 数组的值])