我遇到了MongoDB的问题。当我做出类似的事情时:
User.find({}, (err, result) => { })
我得到类似的东西:
[{
_id: someId
name: someName
surname: someSurname
}]
当我将其复制到剪贴板并粘贴到任何变量时:
let a = [{
"_id": "someId"
"name": "someName"
"surname": "someSurname"
}]
我检查是否(a === result
),我得到了错误而且不一样。我的问题是为什么,以及如何解决它,因为我需要改变" result
"类似于" a
"
答案 0 :(得分:0)
根据Mukesh Sharma的回应,你没有正确使用同等操作员。
使用===
时,测试对象本身是否指向相同的引用(绝对不是这种情况)。
您似乎想测试两个数组(也是具有特殊属性的对象)是否相等。在这种情况下,使用简单的相等将永远不会起作用。您必须迭代数组中的所有对象,然后,对于每个对象,遍历所有键并检查它们是否与另一个数组的对应项相似。
您可以参考this回答来检查如何比较两个对象。最终结果应如下所示:
// assuming you use ES6
let array1 = [{ a: 1, b: 2 }];
let array2 = [{ a: 1, b: 2 }];
// check if the arrays have different length
if (array1.length !== array2.length) {
// definitely not equal
return false;
}}
let n = array1.length;
for (let i = 0; i < n; i++) {
let res = deepObjCmp(array1[i], array2[i]);
if (!res) {
// at least one object is different
return false;
}
}
答案 1 :(得分:0)
比较两个对象的方法是将它们转换为JSON并检查结果字符串是否相等
function jsonEqual(a,b) {
return JSON.stringify(a) === JSON.stringify(b);
}
jsonEqual(user1, user2) // true in all cases
从此链接获取的示例http://www.mattzeunert.com/2016/01/28/javascript-deep-equal.html只需参考您将理解的内容。
答案 2 :(得分:0)
如果您只想比较_id
,name
&amp; surname
属性,您可以手动检查每个属性。这种方法可能是满足您需求的最有效方式。
function isEqual(documentOne, documentTwo) {
return (documentOne._id.toString() === documentTwo._id.toString() && documentOne.name === documentTwo.name && documentOne.surname === documentTwo.surname);
}
isEqual(a[0], result[0]);