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

TypeScript中按id匹配用另一对象属性值修改目标对象属性

实现方案

步骤1:构建id到imageURL的映射表

先把arr2处理为Map结构,避免多次遍历arr2,提升执行效率:

const imageUrlMap = new Map(arr2.map(item => [item.id, item.imageURL]));

步骤2:遍历arr1修改匹配项的对应属性

直接遍历arr1,匹配到id存在的场景下仅更新imageURL字段,不会修改对象其他属性,也不会替换整个对象:

arr1.forEach(item => {
  if (imageUrlMap.has(item.id)) {
    item.imageURL = imageUrlMap.get(item.id)!;
    // 此处非空断言!是因为已经提前判断过map中存在该id,可安全使用
  }
});

完整带类型约束的TypeScript示例

如果需要明确TS类型,可以补充类型定义:

// 定义通用对象类型
interface UserItem {
  id: number;
  name: string;
  imageURL: string;
}

let arr1: UserItem[] = [{id:1, name:'test user', imageURL:''}, {id:1, name:'test user', imageURL:''}, {id:1, name:'test user 3', imageURL:''}];
let arr2: UserItem[] = [{id:1, name:'test user', imageURL:'abcdefghijklmnop'}];

const imageUrlMap = new Map<number, string>(arr2.map(item => [item.id, item.imageURL]));

arr1.forEach(item => {
  const targetUrl = imageUrlMap.get(item.id);
  if (targetUrl) {
    item.imageURL = targetUrl;
  }
});

实现说明

  • 仅修改imageURL单一属性,不会替换整个对象,符合要求
  • 时间复杂度为O(arr1长度 + arr2长度),比双重循环的O(arr1*arr2)效率更高,尤其适合数组元素较多的场景
  • 当arr2中存在多个相同id的元素时,默认取最后一个出现的id对应的imageURL,如有特殊去重逻辑可自行调整映射表构建规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:36:03