比较2个数组并分配匹配值

Pie*_*res 0 javascript arrays ecmascript-6

我有2个对象数组
第一个叫做数据:

const data = [
  {
    id: 1,
    nombre: 'Piero',
  },
  {
    id: 4,
    nombre: 'Nelson',
  },
  {
    id: 7,
    nombre: 'Diego'
  },
 ]
Run Code Online (Sandbox Code Playgroud)

第二个叫做subs:

const subs = [
  {
    id: 1,
    name: 'Temprano',
  },
  {
    id: 4,
    name: 'A tiempo',
  },
  {
    id: 7,
    name: 'Tarde'
  },
]
Run Code Online (Sandbox Code Playgroud)

在这我想比较,如果它们具有相同的ID,该潜艇阵列将其名称值传递给它,如果它不匹配,它把一个" - "数据阵列中,试试这个方法:

data.forEach((d)=>{
 subs.forEach((s)=>{
   if(d.id === s.id){
     d.subname = s.name;
   }
   else {
     d.subname = '-';
    }
   });
 }); 
Run Code Online (Sandbox Code Playgroud)

但总是分配值,'-'就好像它不匹配任何值.我做错了什么?还有其他更简单的方法吗?非常感谢你的帮助.

的大小潜艇阵列可以变化.

小智 5

当找到成功匹配时,您似乎没有退出内循环.

在第一个示例中,您正在寻找Piero的匹配项,在第一次迭代中1===1d.subname正确设置为"Temprano".但是,然后您继续比较值 - 1 !== 4因此Temprano被' - '覆盖,1 !== 7因此它会被重写.

另一种方法:

data.forEach(d => {
const match = subs.find(s => s.id === d.id);
d.subname = match ? match.name : '-';});
Run Code Online (Sandbox Code Playgroud)

我还建议添加一个你不希望找到匹配的案例,这样你就可以看到它在两种情况下都有效!