js分组(group by)

//分组
const groupBy = (list, fn) => {
    const groups = {};
    list.forEach(function (o) {
        const group = JSON.stringify(fn(o));
        groups[group] = groups[group] || [];
        groups[group].push(o);
    });
    // return Object.keys(groups).map(function (group) {
    //     return groups[group];
    // });
    return groups;
}

demo

let links = [
            { source: 'test1', target: 'test1', value: 10 },
            { source: 'test1', target: 'test2', value: 30 },
            { source: 'test1', target: 'test3', value: 40 },
            { source: 'test1', target: 'test4', value: 20 }
]
let groupData = groupBy(links, (link) => {
            return link.source
})
console.log(groupData)
// 返回结果
//{
//     "test1":[
//         { source: "test1", target: "test1", value: 10 },
//         { source: "test1", target: "test2", value: 30 },
//         { source: "test1", target: "test3", value: 40 },
//         { source: "test1", target: "test4", value: 20 }
//     ]
// }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是两种JavaScript实现分组的方法: 1.使用reduce()方法实现分组 ```javascript const data = [ { name: 'apple', type: 'fruit' }, { name: 'banana', type: 'fruit' }, { name: 'carrot', type: 'vegetable' }, { name: 'potato', type: 'vegetable' }, { name: 'orange', type: 'fruit' }, { name: 'broccoli', type: 'vegetable' }, ]; const groupedData = data.reduce((result, item) => { const key = item.type; if (!result[key]) { result[key] = []; } result[key].push(item); return result; }, {}); console.log(groupedData); // 输出: // { // fruit: [ // { name: 'apple', type: 'fruit' }, // { name: 'banana', type: 'fruit' }, // { name: 'orange', type: 'fruit' } // ], // vegetable: [ // { name: 'carrot', type: 'vegetable' }, // { name: 'potato', type: 'vegetable' }, // { name: 'broccoli', type: 'vegetable' } // ] // } ``` 2.使用自定义函数实现分组 ```javascript function groupBy(array, key) { return array.reduce((result, item) => { const group = item[key]; if (!result[group]) { result[group] = []; } result[group].push(item); return result; }, {}); } const data = [ { name: 'apple', type: 'fruit' }, { name: 'banana', type: 'fruit' }, { name: 'carrot', type: 'vegetable' }, { name: 'potato', type: 'vegetable' }, { name: 'orange', type: 'fruit' }, { name: 'broccoli', type: 'vegetable' }, ]; const groupedData = groupBy(data, 'type'); console.log(groupedData); // 输出: // { // fruit: [ // { name: 'apple', type: 'fruit' }, // { name: 'banana', type: 'fruit' }, // { name: 'orange', type: 'fruit' } // ], // vegetable: [ // { name: 'carrot', type: 'vegetable' }, // { name: 'potato', type: 'vegetable' }, // { name: 'broccoli', type: 'vegetable' } // ] // } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值