首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么来自snapshot.before和snapshot.after的相同对象不相等?

为什么来自snapshot.before和snapshot.after的相同对象不相等?
EN

Stack Overflow用户
提问于 2019-03-07 06:16:28
回答 1查看 70关注 0票数 0

我有一个云函数来增加计数器,只有当某些字段在快照中发生变化时(本例中的“练习”)。

在我的云功能中,我有这样的检查,它总是出于某种原因而触发:

代码语言:javascript
复制
const before = snapshot.before.data();
const after = snapshot.after.data();     
if (before['exercises'] !== after['exercises']) {
   console.log(before['exercises']);
   console.log(after['exercises']);
   // Increment the counter...
}

日志语句是相同的:

代码语言:javascript
复制
[ { exerciseId: '-LZ7UD7VR7ydveVxqzjb',
    title: 'Barbell Bench Press' } ] // List of exercise objects

[ { exerciseId: '-LZ7UD7VR7ydveVxqzjb',
    title: 'Barbell Bench Press' } ] // Same list of exercise objects

如何确保快照中的这些值被同等对待?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 08:00:09

在Javascript中,对象是引用类型。如果你做了这个:

代码语言:javascript
复制
{a: 1} === {a: 1}

这将是错误的,因为Javascript正在读:

ObjectReference1 === ObjectReference2

对于determine the equality of two Javascript Objects,您可以做一些事情,但是如果您的对象是那么小的话,我只需要做一个JSON.stringify等式

代码语言:javascript
复制
const before = {
  exerciseId: '-LZ7UD7VR7ydveVxqzjb',
    title: 'Barbell Bench Press' }

const after = {
  exerciseId: '-LZ7UD7VR7ydveVxqzjb',
  title: 'Barbell Bench Press'
};

function areEqual(object1, object2) {
  return JSON.stringify(object1) === JSON.stringify(object2);
}


console.log(areEqual(before, after)); /// true

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55037197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档