js 数组分组

 

 

 

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

  

 

posted @ 2020-06-03 11:22  zwsu  阅读(2295)  评论(0编辑  收藏  举报