
function group(arr, step) { return arr.reduce((x, y) => { return Array.isArray(x) ? (x[x.length - 1].push(y) == step ? [...x, []] : x) : [[x, y]]; }) } group([1, 2, 3, 4, 5, 6, 7, 8, 9, 0],3)
function group(arr, step) { function copyPush(v, item) { var res = []; for (var i = 0; i < v.length; i++) { res.push(v[i]); } res.push(item); return res; } return arr.reduce(function(x, y){ return Array.isArray(x) ? (x[x.length - 1].push(y) == step ? copyPush(x,[]) : x) : [[x, y]]; }) } //group([1, 2, 3, 4, 5, 6, 7, 8, 9, 0],3)
补1
[
{ name: "张三1", age: 13 },
{ name: "张三2", age: 13 },
{ name: "张三3", age: 13 },
{ name: "张三4", age: 14 },
{ name: "张三5", age: 14 },
{ name: "张三6", age: 14 },
{ name: "张三7", age: 15 }
].reduce(
(a, b) => {
var item = a.filter(x => x[0] && x[0].age == b.age)[0];
item ? item.push(b) : a.push([b]);
return a;
},
[]
);

补2
function group(arr, key) {
if (!arr || !key) return arr;
return arr.reduce((a, b) => {
let k = key(b),
item = a.filter(x => x._key === k)[0] || [];
return (item._key = k), item.length || a.push(item), item.push(b), a;
}, []);
}

