首页 > 解决方案 > 比较和设置列表/数组中的对象的更好方法(前端角度 - 打字稿)?

问题描述

我知道这可行,但我也相信有更好的方法来做到这一点

所以我有两个具有不同对象的列表/数组,但有一个共同的属性。对于list1中的每个元素,我想在list2中找到元素并设置一个属性...

obj1 类型与 obj2 类型不同

  for(let obj1 of this.list1) {
    for(let obj2 of this.list2) {  
        if(obj1.fieldA == obj2.fieldB) {
            obj1.fieldC = obj2.fieldD;
        }
    }   
  }

标签: arraysangularlistfindcompare

解决方案


创建一个 MapfieldB作为键,fieldD作为值。

迭代list1,如果fieldA在 Map 中找到,则在 中设置值fieldC

const map = new Map(this.list2.map(({ fieldB, fieldD }) => [fieldB, fieldD]));

for(const obj1 of this.list1) {
  if(map.has(obj1.fieldA)) {
    obj1.fieldC = map.get(obj1.fieldA);
  }
}

推荐阅读