You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript按ID去重合并用户数组与批次用户数组

解决方案:基于ID合并去重用户数组

实现思路

核心是通过用户ID判断唯一性,为了高效查找已存在的ID,我们可以先用Set存储allUsers中所有已有的ID(查找时间复杂度O(1),比数组find的O(n)更高效)。然后遍历userBatches中的每一个用户,若其ID不在Set中,就将该用户添加到allUsers,同时把ID加入Set。

完整代码实现

let allUsers = [
    { id: 1, name: "Mike" },
    { id: 2, name: "John" },
    { id: 3, name: "Kim" },
    { id: 4, name: "Mike" }
];

const userBatches = [
    {   
        "batchId": 1,
        "users": [
            { id: 5, name: "Max" },
            { id: 2, name: "Simon" }
        ]
    },
    {   
        "batchId": 2,
        "users": [
            { id: 6, name: "Max" },
            { id: 7, name: "Conor" }
        ]
    },
    {   
        "batchId": 3,
        "users": [
            { id: 3, name: "Norman" }
        ]
    }
];

// 提取已有用户的ID到Set,用于快速判断
const existingUserIds = new Set(allUsers.map(user => user.id));

userBatches.forEach(batch => {
    batch.users.forEach(user => {
        if (!existingUserIds.has(user.id)) {
            allUsers.push(user);
            existingUserIds.add(user.id);
        }
    });
});

console.log(allUsers);

代码说明

  1. 创建ID集合:new Set(allUsers.map(user => user.id)) 把allUsers里的所有用户ID提取出来存入Set,后续判断ID是否存在的操作几乎是瞬时的。
  2. 遍历批次用户:通过两层forEach遍历userBatches中的每一个批次和批次里的每一个用户。
  3. 判断并添加:如果当前用户的ID不在existingUserIds中,就把该用户添加到allUsers,同时把ID加入Set,避免后续重复添加。

运行结果

执行后allUsers将和预期结果完全一致:

[
    { id: 1, name: "Mike" },
    { id: 2, name: "John" },
    { id: 3, name: "Kim" },
    { id: 4, name: "Mike" },
    { id: 5, name: "Max" },
    { id: 6, name: "Max" },
    { id: 7, name: "Conor" }
]

内容的提问来源于stack exchange,提问作者StormTrooper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:05:22