比较两个JavaScript对象并提取匹配属性的键和值
如果我知道两个JavaScript对象(分别称为“req”和“updateDoc”)之间有一个共同的属性,那么有没有一种方法可以使用占位符参数来表示任何键,以便找到与这两个对象匹配的正确的键?我试过这个,但不起作用:比较两个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); } } 顺便说一下,在我的用例中,我
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])
toif(key in updatedoc)
此if语句中的所有内容将仅对req和updatedDoc中存在的键执行。为req
中的键存储的值将是val
,该值已从对象中取消引用。条目
您可以将UpdateData更改为新值,如soUpdateData[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中得到一个具有公共键和值的对象吗。我想这个会有用的,谢谢。我也喜欢这个。不错。