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

TypeScript实现:仅将不存在的元素添加至目标数组

TypeScript实现:将新数组中不存在的元素合并到原数组

看起来你需要把Users2Add里不在Users中的用户添加进去,我来给你写对应的TypeScript实现,顺便优化一下逻辑~

首先先明确你给出的两个数组:

const Users = [
  { "id": 0, "name": "Scott" },
  { "id": 0, "name": "Jan" },
  { "id": 0, "name": "Jack" },
];

const Users2Add = [
  { "id": 0, "name": "Scott" },
  { "id": 0, "name": "Andy" },
  { "id": 0, "name": "John" },
];

基础实现(和你的预期逻辑一致)

你提到的contains其实不是JavaScript/TypeScript数组的原生方法,我们可以用some来判断元素是否存在,这是最贴合你思路的写法:

// 遍历要添加的每个用户
Users2Add.forEach(userToAdd => {
  // 检查原数组中是否有相同id的用户
  const userExists = Users.some(existingUser => existingUser.id === userToAdd.id);
  // 不存在就推送到原数组
  if (!userExists) {
    Users.push(userToAdd);
  }
});

// 验证结果
console.log(Users);

高效优化方案(适合大数据量)

如果你的数组元素比较多,每次用some遍历原数组会有点慢,我们可以先把原数组的id存到Set里,这样判断存在性的效率会更高:

// 先把已存在的用户id存入Set,O(n)时间
const existingIds = new Set(Users.map(user => user.id));

// 过滤出需要添加的用户,再批量推入原数组
const newUsers = Users2Add.filter(user => !existingIds.has(user.id));
Users.push(...newUsers);

console.log(Users);

补充说明

  • 注意你示例里所有用户的id都是0,这会导致Andy和John也不会被添加(因为原数组已经有id=0的用户了)。如果你的实际需求是用用户名判断唯一性,只需要把判断条件改成existingUser.name === userToAdd.name就行。
  • 如果需要同时用id和name判断(比如相同id但不同名算重复,或者不同id同名算不同),可以调整判断逻辑:
    const userExists = Users.some(existingUser => 
      existingUser.id === userToAdd.id && existingUser.name === userToAdd.name
    );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:58:28