比较两个JavaScript对象并提取匹配属性的键和值

比较两个JavaScript对象并提取匹配属性的键和值,javascript,object,ecmascript-6,Javascript,Object,Ecmascript 6,如果我知道两个JavaScript对象(分别称为“req”和“updateDoc”)之间有一个共同的属性,那么有没有一种方法可以使用占位符参数来表示任何键,以便找到与这两个对象匹配的正确的键?我试过这个,但不起作用: for (const [key, val] of Object.entries(req)) { if (key === updatedDoc[key]) { console.log("key, val", key, val); } } 顺便说一下,在我的用例中,我

如果我知道两个JavaScript对象(分别称为“req”和“updateDoc”)之间有一个共同的属性,那么有没有一种方法可以使用占位符参数来表示任何键,以便找到与这两个对象匹配的正确的键?我试过这个,但不起作用:

for (const [key, val] of Object.entries(req)) {
  if (key === updatedDoc[key]) {
    console.log("key, val", key, val);
  }
}
顺便说一下,在我的用例中,我知道两个对象之间总是有一个匹配的属性。为了澄清,这两个对象被称为“req”和“updatedoc”。我不知道它们的键是什么,但我知道这两个对象有一个相同的键

为了更清楚一点,“req”将是一些简单的东西,如:

const req = { 
  "deleted" : true, 
  "apiKey" : "4d9d9291", 
  "token" : "ffdsfjsdfsdjfa" 
}
。。。而
updateDoc
将是一个完整的文档,如下所示:

const updatedDoc = {
   _id: <ObjectId>,
   firstName: "John",
   lastName: "Smith",
   age: 42
   deleted: false
}
const updatedoc={
_id:,
名字:“约翰”,
姓:“史密斯”,
年龄:42
已删除:false
}
两者都有一个名为“已删除”的属性。基本上,我正在将传入的请求与其相关的整个文档进行匹配。然后,我想从“req”中获取值,并将其保存到“updateDoc”中以获得正确的键。但首先我需要找到匹配的键,并从“req”中取出值。有什么方法可以做到这一点吗?

为什么不为第一个对象选择一个,并为第二个对象过滤关键帧呢

结果是一个具有公共密钥的数组

var objectA={a:1,b:2,c:3},
objectB={b:4,c:5,d:6},
common=Object.keys(objectB).filter(Set.prototype.has,new Set(Object.keys(objectA)),
values=common.map(k=>objectA[k]);
console.log(通用);

console.log(值)试试这个解决方案,我想它会解决问题的

updatedDoc.forEach(function(i,v){
for (const [key, val] of Object.entries(req)) {
      if (key === i && req[key]==updatedDoc[i]) {
            console.log("key, val", key, val);
      }
});

您应该能够修改循环以进行更改

if(key==updatedoc[key])
to
if(key in updatedoc)

此if语句中的所有内容将仅对req和updatedDoc中存在的键执行。为
req
中的键存储的值将是
val
,该值已从
对象中取消引用。条目

您可以将UpdateData更改为新值,如so
UpdateData[key]=val
。如果愿意,还可以将更改存储在数组中,以备以后使用

const updatedoc={
名字:“约翰”,
姓:“史密斯”,
年龄:42,,
已删除:false
}
常数要求={
“删除”:正确,
“apiKey”:“4d9d9291”,
“令牌”:“ffdsfjsdfsdjfa”
}
常量更改=[]
for(对象条目的常量[键,值](req)){
如果(输入UpdateDoc){
//获取上一个值
const oldVal=updatedoc[key]
//更新UpdateDoc
UpdateDoc[key]=val
//把零钱存起来或者做任何事情
改变。推({
[钥匙]:{
新:瓦尔,
old:oldVal
}
})
}
}
console.log(updatedoc)

console.log(更改)
是否更新Doc是对象的对象?您是否仅测试匹配的属性和值?或者只是钥匙。如果只是关键点,其中任何一个都会起作用:获取匹配,然后可以使用匹配来获取值等。在上面添加了更清晰的内容。是的,所以只需抓取每个关键点并进行区分。如果您知道一个对象只有一个关键点,它会变得更简单;不需要循环。key===UpdateDoc[key]我认为这里的问题是,通过这种方式,您可以比较来自req的键和来自UpdateDoc的值,而您需要比较这两个对象的键。这给了我共同的键,这很好,但我还需要知道在req中找到的匹配键的值。因此,在这里的例子中:
[{“b”:4},{“c”:5}]
,假设
objectB
表示
req
。您可以映射值,请参见编辑。你想从objectA中得到一个具有公共键和值的对象吗。我想这个会有用的,谢谢。我也喜欢这个。不错。