【问题标题】:Nodejs Mongo result is not the same as copied result [duplicate]Nodejs Mongo结果与复制结果不同[重复]
【发布时间】:2018-02-13 08:55:35
【问题描述】:

我遇到了 MongoDB 的问题。当我做类似的事情时:

User.find({}, (err, result) => { })

我得到类似的东西:

[{
_id: someId
name: someName
surname: someSurname
}]

当我将它复制到剪贴板并粘贴到任何变量时:

let a = [{
"_id": "someId"
"name": "someName"
"surname": "someSurname"
}]

然后我检查是否 (a === result),我得到错误并且它不一样。我的问题是为什么以及如何解决它,因为我需要将“result”更改为“a”

【问题讨论】:

标签: javascript json node.js


【解决方案1】:

根据 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;
    }
}

【讨论】:

    【解决方案2】:

    比较两个对象的一种方法是将它们转换为 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的示例只需参考它您就会明白。

    【讨论】:

      【解决方案3】:

      如果您只想比较_id、name 和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]);
      

      【讨论】:

        猜你喜欢
        • 2016-07-12
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 2016-02-13
        相关资源
        最近更新 更多