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);
代码说明
- 创建ID集合:
new Set(allUsers.map(user => user.id))把allUsers里的所有用户ID提取出来存入Set,后续判断ID是否存在的操作几乎是瞬时的。 - 遍历批次用户:通过两层
forEach遍历userBatches中的每一个批次和批次里的每一个用户。 - 判断并添加:如果当前用户的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
相关产品推荐
相关产品推荐

