组数组的值在10的倍数的相同范围内

我有一个数组,例如:

var arr = [2,4,7,11,25,608,65,109,99,100,504,606,607]; 

我需要做到这一点,因此每个值在10以下的倍数范围内,并且在它之上的10的倍数被组合在一起。

例如,2,4,7介于0和10之间,因此它们必须在一起。 在他们的小组中将有11个人,如25,65等.606,607,608将在一起。

上面的数组应该成为:

[ [2,4,7],[11],[25],[65],[99],[101],[504],[100,109],[606,607,608] ]

我一直在考虑它几个小时,我还没有想出任何东西。 这真的很糟糕,不值得一提,但到目前为止我正在玩Math.round( http://jsfiddle.net/40napnyx/2/ )

编辑:我想添加另一个问题(如果实际答案不包括这个新问题的解决方案,我将不会根据此选择正确的答案)。

该数组可能包含带字母的值。 这些值应按字母顺序排列在同一组中(仅用第一个字母确定顺序)。 该组应该是结果数组中的最后一个值。

所以例如var arr = [2, 4, 11,'a3', 25, 7, 'j', 'bzy4];

将是[[2,4,7],[11],[25],['a3','bzy4', 'j']]

这是一个通用函数:

 function groupBy(ary, keyFunc) { var r = {}; ary.forEach(function(x) { var y = keyFunc(x); r[y] = (r[y] || []).concat(x); }); return Object.keys(r).map(function(y) { return r[y]; }); } // usage: var arr = [2,4,7,11,25,608,65,99,101,504,606,607]; g = groupBy(arr, function(x) { return Math.floor(x / 10) }); document.write(JSON.stringify(g)); 

这就是我提出的:

 var arr = [2,4,7,11,25,65,99,101,504,606,607,608]; arr.sort(function(a, b) { if(a > b) return 1; if(a < b) return -1; else return 0; }); var grouped_array = []; for(var i = 0; i < arr.length; i++) { var group = []; var curr_group = Math.floor(arr[i]/10); while(Math.floor(arr[i]/10) == curr_group) { group.push(arr[i]); i++; } grouped_array.push(group); } 

http://jsfiddle.net/40napnyx/3/