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===1并d.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)
我还建议添加一个你不希望找到匹配的案例,这样你就可以看到它在两种情况下都有效!