将数组

时间:2016-04-27 11:46:44

标签: javascript arrays function filter

我有一个内部有一些值的数组,我希望返回另一个数组,它将值分组到自己的数组中。

所以我想要达到的结果是这样的:

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]]

6 个答案:

答案 0 :(得分:4)

此提案适用于排序数组的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>');

答案 1 :(得分:2)

你走了。顺便说一句,这个也可以使用未排序的数组

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);

这应该做的。相当直接.., 您获取元素然后将其删除。

答案 2 :(得分:1)

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

&#13;
&#13;
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]));
&#13;
&#13;
&#13;

答案 3 :(得分: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);

答案 4 :(得分:1)

使用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));

答案 5 :(得分:0)

我认为您可以使用以下代码:

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);

现在groupsArray将包含结果