在Javascript数组中对连续的重复值进行分组

时间:2015-12-29 21:51:03

标签: javascript arrays

我有这个数组:

var arr = ['a','a','b','b','b','c','d','d','a','a','a'];

我希望这个输出:

[
  ['a','a'],
  ['b','b','b'],
  ['c'],
  ['d','d'],
  ['a','a','a'],
]

Obs。:请注意,我不想要所有重复值组。只有连续的重复值。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

使用Array.prototype.reduce()的解决方案和前一个元素的视图。

var arr = ['a', 'a', 'b', 'b', 'b', 'c', 'd', 'd', 'a', 'a', 'a'],
    result = [];

arr.reduce(function (r, a) {
    if (a !== r) {
        result.push([]);
    }
    result[result.length - 1].push(a);
    return a;
}, undefined);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

答案 1 :(得分:1)

您可以像这样减少数组:

var arr = ['a','a','b','b','b','c','d','d','a','a','a'];

var result = arr.reduce(function(r, i) {
    if (typeof r.last === 'undefined' || r.last !== i) {
        r.last = i;
        r.arr.push([]);
    }
    r.arr[r.arr.length - 1].push(i);
    return r;
}, {arr: []}).arr;

console.log(result);

请参阅Array.prototype.reduce()