如果我知道分别在两个称为" req"one_answers" UpdatedDoc"的JavaScript对象之间有共同的属性,我是否可以使用占位符参数来表示任何键,以便我可以找到在两个对象上匹配的合适的一个?我尝试过,但它不起作用:
for (const [key, val] of Object.entries(req)) {
if (key === updatedDoc[key]) {
console.log("key, val", key, val);
}
}
顺便说一句,在我的用例中,我知道两个对象之间总是有一个匹配的属性。为了澄清,这两个对象称为" req"one_answers" updatedDoc"。我不知道它们的关键是什么,但是我知道这两个对象将有一个共同点。
要添加更多清晰度," req"将很简单,例如:
const req = {
"deleted" : true,
"apiKey" : "4d9d9291",
"token" : "ffdsfjsdfsdjfa"
}
...而updatedDoc
将是一个完整的文档,因此:
const updatedDoc = {
_id: <ObjectId>,
firstName: "John",
lastName: "Smith",
age: 42
deleted: false
}
都有一个称为"删除"的属性。基本上,我将通过的请求与与之相关的整个文档匹配。然后,我想从" req"中获取值,并将其保存到" UpdatedDoc"中以获取正确的密钥。但是首先,我需要找到匹配的键,然后从" req"中拔出值。有什么办法可以做到吗?
您应该能够修改循环以更改
if (key === updatedDoc[key])
to if (key in updatedDoc)
此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)
为什么不为第一个对象服用Set
并过滤第二个对象的键。
结果是带有通用键的数组。
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(common);
console.log(values);
有点短的版本。
var objectA = { a: 1, b: 2, c: 3 },
objectB = { b: 4, c: 5, d: 6 },
common = Object.keys(objectA).filter({}.hasOwnProperty.bind(objectB)),
values = common.map(k => objectA[k]);
console.log(common);
console.log(values);
尝试此解决方案,我认为它将解决问题
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);
}
});