将相同的值分组到数组中

Group identical values in array

本文关键字:数组      更新时间:2023-09-26

我有一个数组,里面有一些值,我希望返回另一个数组,该数组将值分组到它们自己的数组中。

所以我试图实现的结果是这样的:

var arr = [1,1,2,2,2,3,3,4,4,4,4,5,6]
var groupedArr =[[1,1],[2,2,2],[3,3],[4,4,4,4],[5],[6]]

此提案适用于排序数组的Array#reduce

var arr = [1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 5, 6],
    groupedArr = arr.reduce(function (r, a, i) {
        if (!i || a !== r[r.length - 1][0]) {
            return r.concat([[a]]);
        }
        r[r.length - 1].push(a);
        return r;
    }, []);
document.write('<pre>' + JSON.stringify(groupedArr, 0, 4) + '</pre>');

你去吧。顺便说一下,这也适用于未排序的数组

var arr = [1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 5, 6]
var grpdArr = [];
while(arr.length > 0){
    var item = arr[0];
    grpdArr.push(arr.filter(function(val) {
        return val === item;
    }));
    arr = arr.filter(function(val){return val!==item});
}

//console.log(arr, grpdArr);

嗯,这应该可以。非常简单..,你得到元素,然后删除它们。

带有forEach和临时数组

var arr = [1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 5, 6];
var temp = [];
var res = [];
arr.forEach(function(e) {
    if (temp.slice(-1) == e) temp.push(e);
    else {
        temp = [e];
        res.push(temp);
    }
});
document.write(JSON.stringify(res));

这可能不是最佳版本,但应该这样做。这也适用于未排序的数组。

function abc(arr) {
  var newObj = new Object();
  for (var i in arr) {
    if (typeof newObj[arr[i]] == 'undefined') {
      newObj[arr[i]] = new Array();
    }
    newObj[arr[i]].push(arr[i]);
  }
  var groupedArr = new Array();
  for (i in newObj) {
    groupedArr.push(newObj[i]);
  }
  return groupedArr;
}
console.log(abc([1, 1, 2, 2, 3, 3, 3, 4, 1]));

这是我

心中最直接的:

var arr = [1,1,2,2,2,3,3,4,4,4,4,5,6];
var grouped = {}; 
var groupedArr = []; 
//accumulate the values in an object, each key is an array
for (var i = 0; i < arr.length; i++) {
    if (!grouped[arr[i]]) grouped[arr[i]] = []; 
    grouped[arr[i]].push(arr[i]);
}
//loop through all the keys in the object and push the arrays to the master array
var keys = Object.keys(grouped);
for (var i = 0; i < keys.length; i++) {
    groupedArr.push(grouped[keys[i]]);
}
console.log(groupedArr);
我认为

您可以使用以下代码:

var arr = [1,1,2,2,2,3,3,4,4,4,4,5,6]
var groupedArray = [];
var temp = arr.sort();
var tempArray = [arr[0]];
for(var i = 0; i < temp.length - 1; ++i){
    if(temp[i] == temp[i + 1]){
    tempArray.push(temp[i + 1]);
  }else{
    groupedArray.push(tempArray);
    tempArray = [temp[i + 1]];
  }
}
groupedArray.push(tempArray);

现在,分组数组将包含结果