如果我知道两个 JavaScript 对象之间有一个共同的属性,分别称为“req”和“updatedDoc”,有没有一种方法可以使用占位符参数来表示任何键,以便我可以找到匹配的正确属性在两个物体上?我尝试了这个,但它不起作用:
for (const [key, val] of Object.entries(req)) {
if (key === updatedDoc[key]) {
console.log("key, val", key, val);
}
}
顺便说一句,在我的用例中,我知道两个对象之间总会有一个匹配的属性。澄清一下,这两个对象称为“req”和“updatedDoc”。我不知道它们的 key 是什么,但我知道这两个对象将有一个共同的 key 。
为了更清楚一点,“req”将变得简单,例如:
const req = {
"deleted" : true,
"apiKey" : "4d9d9291",
"token" : "ffdsfjsdfsdjfa"
}
...而 updatedDoc
将是一个完整的文档,如下所示:
const updatedDoc = {
_id: <ObjectId>,
firstName: "John",
lastName: "Smith",
age: 42
deleted: false
}
两者都有一个名为“已删除”的属性。基本上,我将传入的请求与其所属的整个文档进行匹配。然后我想从“req”中获取值并将其保存到“updatedDoc”以获得正确的 key 。但首先我需要找到匹配的键,并从“req”中提取值。有什么办法可以做到这一点吗?
最佳答案
你应该能够修改你的循环来改变
if (key === UpdatedDoc[key])
到 if (updatedDoc 中的 key)
此 if 语句中的所有内容都只会在 req 和 UpdatedDoc 中都存在的键上执行。为 req
中的键存储的值将是 val
,它是从 Object.entries
您可以将updatedData更改为新值,如下updatedData[key] = val
。如果您愿意,您还可以将更改存储在数组中以供以后使用。
const updatedDoc = {
firstName: "John",
lastName: "Smith",
age: 42,
deleted: false
}
const req = {
"deleted": true,
"apiKey": "4d9d9291",
"token": "ffdsfjsdfsdjfa"
}
const changes = []
for (const [key, val] of Object.entries(req)) {
if (key in updatedDoc) {
// get the previous value
const oldVal = updatedDoc[key]
// update updatedDoc
updatedDoc[key] = val
// store the change or do whatever
changes.push({
[key]: {
new: val,
old: oldVal
}
})
}
}
console.log(updatedDoc)
console.log(changes)
关于javascript - 比较两个 JavaScript 对象并提取匹配属性的键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54834863/