我有 2 个对象数组
第一个名为数据:
const data = [
{
id: 1,
nombre: 'Piero',
},
{
id: 4,
nombre: 'Nelson',
},
{
id: 7,
nombre: 'Diego'
},
]
第二个称为subs:
const subs = [
{
id: 1,
name: 'Temprano',
},
{
id: 4,
name: 'A tiempo',
},
{
id: 7,
name: 'Tarde'
},
]
我想比较一下,如果它们具有相同的 ID,subs 数组会将其名称值传递给它,如果不匹配,则会在数据中放入“-”数组,试试这个方法:
data.forEach((d)=>{
subs.forEach((s)=>{
if(d.id === s.id){
d.subname = s.name;
}
else {
d.subname = '-';
}
});
});
但始终用 '-'
指定值就好像它不匹配任何一样。我做错了什么部分?还有其他更简单的方法可以做到这一点吗?我将非常感谢您的帮助。
subs 数组的大小可能会有所不同。
最佳答案
当找到成功的匹配时,您似乎没有退出内循环。
在第一个示例中,您正在寻找 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 : '-';});
我还建议添加一个您不希望找到匹配项的情况,这样您就可以看到它在这两种情况下都有效!
关于javascript - 比较 2 个数组并分配匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301338/