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; }, []); }