我有两件物品

const obj1 = {
    item1: {
        name: '1'
    },
    item2: {
        name: '2'
    }
}

const obj2 = {
    item1: {
        sample: 'sample1'
    },
    item2: {
        sample: 'sample2'
    }
}

我如何遍历第二个对象obj2,找到与对象obj1的第一个匹配并返回它?

在上面的示例中,我应该返回

{
    item1: {
        name: '1'
    }
}

因为item1是两个对象之间的第一个匹配,所以我想要obj1中的内容.

try 了以下操作:

const keys = obj2 && Object.keys(obj2);

const output = () => {
    if (keys) {
        const finalResponse = keys.map(key => {
          if (obj1[key]) return obj1[key];
          return undefined;
        });
        return finalResponse
    }
    return null
}

但最终得到了2个匹配项,而我只想要第一次匹配.

有没有一种更干净的方法来做这件事.

只要我能在obj1中返回匹配,就可以在obj1或obj2上循环.

推荐答案

您已经有了解决方案,当匹配项存在时,您可以将匹配的键保存在变量中.

const keys = obj2 && Object.keys(obj2);
let keyMatched = '';
const output = () => {
    if (keys) {
        const finalResponse = keys.map(key => {
          if (obj1[key] && !keyMatched) {   // Check for first match  
              keyMatched = key;   // Save the first match
              return obj1[key];
          }
          return undefined;
        });
        return finalResponse
    }
    return null
}

演示运行

const obj1 = {
  item1: {
      name: '1'
  },
  item2: {
      name: '2'
  }
}

const obj2 = {
  item1: {
      sample: 'sample1'
  },
  item2: {
      sample: 'sample2'
  }
}
const keys = obj2 && Object.keys(obj2);
let keyMatched = '';
const output = () => {
    if (keys) {
        const finalResponse = keys.map(key => {
          if (obj1[key] && !keyMatched) {   // Check for first match  
              keyMatched = key;   // Save the first match
              return obj1[key];
          }
          return undefined;
        });
        return finalResponse
    }
    return null
}
output();
const newObj = {
    [keyMatched]: obj1[keyMatched]
}
console.log(newObj)

Javascript相关问答推荐

类型自定义lazy Promise. all

将自定义排序应用于角形数字数组

如何让npx在windows中运行js脚本?

当我在Reaction中创建一个输入列表时,我的输入行为异常

在不扭曲纹理的情况下在顶点着色器中旋转UV

图表4-堆叠线和条形图之间的填充区域

背景动画让网站摇摇欲坠

TypeORM QueryBuilder限制联接到一条记录

P5play SecurityError:无法从';窗口';读取命名属性';Add';:阻止具有源的帧访问跨源帧

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

React数组查找不读取变量

将字符串解释为数字;将其重新编码为另一个基数

验证Java脚本函数中的两个变量

Rails 7:在不使用导入映射的情况下导入Java脚本

CSS网格使页面自动滚动

JS:inline date子串.

Html/JS:如何在脚本执行前阻止呈现?

将数据添加到数据库时不输出

如何在HTML中使用rxjs显示动态更新

在继续循环之前,请等待带有异步调用的函数完成