Skip to content

1. 数组分组 groupBy

来源:腾讯 PCG 一面

题目

实现一个函数 groupBy(arr, key),按照 key 对数组 arr 进行分组。

代码

js
// 实现一个函数groupBy(arr, key),按照key对数组arr进行分组。
// 腾讯PCG一面

function groupBy(arr, key) {
    const res = {};
    for(const item of arr) {
        const val = item[key];
        if(!res[val]){
            res[val] = []
        }
        res[val].push(item);
    }
    return res;
}

const data = [
    { name: "Alice", age: 20 },
    { name: "Bob", age: 20 },
    { name: "Charlie", age: 22 }
];
console.log(groupBy(data, "age"));

思路

使用哈希表存储分组结果:

  1. 创建空对象 res 作为结果
  2. 遍历数组中的每个元素:
    • 获取元素的 key 对应的值 val
    • 如果 res[val] 不存在,初始化为空数组
    • 将当前元素 push 到 res[val] 数组中
  3. 返回结果对象

关键点

  • 使用对象作为哈希表,key 为分组依据的值,value 为该组的元素数组
  • 需要判断分组是否已存在,不存在则初始化为空数组
  • 时间复杂度 O(n),空间复杂度 O(n)