javascript - 比较 2 个数组并分配匹配的值

标签 javascript arrays ecmascript-6

我有 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===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 : '-';});

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

关于javascript - 比较 2 个数组并分配匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301338/

相关文章:

javascript隐藏div

php - 为什么 array_pad 会阻止一次添加超过 1048576 个元素?

javascript - webpack 和 react 识别 css 类名

javascript - 自定义元素未拾取 onclick

javascript - WebkitSpeechRecognition 停止,不随机触发

javascript - 如何将 Babel 转译为 es5 而不是 es5.1

javascript - jQuery outerHeight 没有返回正确的值

python - 计算交集时避免 numpy 循环

javascript - 使用纯 JavaScript 排序表客户端,无需任何库

javascript - 理解 ES6 中的箭头