js实现groupBy, 数组分组

  费不多说, 先上代码

Array.prototype.groupBy = function(group){
    return group && typeof group==='function'?Array.prototype.reduce.call(this, function(c, v){
        var k = group(v);
        if(c.hasOwnProperty(k)){
            c[k].push(v);
        } else {
            c[k] = [v];
        }
        return c;
    },{}):this;
}

测试数据

var arr = [
	{code: "1", language: "2", content: "3"},
	{code: "1", language: "2", content: "4"},
	{code: "1", language: "3", content: "5"},
	{code: "1", language: "3", content: "6"},
	{code: "2", language: "1", content: "3"},
	{code: "2", language: "2", content: "3"},
	{code: "1", language: "2", content: "4"}
]

使用 arr.groupBy(it=>it.code) 进行分组. 测试结果:
这个人很懒...
写这个是因为在 groovy 中的列表里有 这个方法, 然后发现 js 里面竟然没有. 然后就仿造 groovy 里的用法弄了一个. 嘻嘻, 仅供学习.
另外, 中间的 if-else 可替换为

c[k] = (c[k]||[]).concat(v);

感兴趣的可以试试.

另另外, 这里提供一份多层分组的代码, 虽然没什么用, 但还是希望能给大家提供一点帮助.

Array.prototype.groupByMulti = function(...group){
    const head = group.length?group[0]:(it)=>it;
    // 这里调用了上面的 groupBy 方法
    let first = Array.prototype.groupBy.call(this, head);
    if (group.length<2){
        return first;
    }
    const [, ...tail] = group
    const acc = {};
    for (let [k,v] of Object.entries(first)) {
        acc[k] = Array.prototype.groupByMulti.apply(v, tail)
    }
    return acc;
}

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值