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

标签 javascript object ecmascript-6

如果我知道两个 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/

相关文章:

javascript - 尽可能使用重复值存储数组的子集

reactjs - ReactJS 中默认导出的重要性是什么

javascript - 我如何使用 webpack 从控制台 require()?

javascript - 单击一次页面链接时,导航/汉堡包图标消失

iphone - 将图像保存在 IPHONE 中特定相册的图库中

javascript - 在固定高度内显示尽可能多的文本

javascript - 如何使 "undefined is not a function"错误更有用?

javascript - 重置对象顺序 javascript

javascript - Node.js 与 mysql 来自 felixge 的设计和奇怪的行为

javascript - 在 Angular 6 中使用 toPromise 的正确方法