【问题标题】:Comparing native javascript objects with jQuery [duplicate]将本机 javascript 对象与 jQuery 进行比较 [重复]
【发布时间】:2011-04-17 00:45:39
【问题描述】:

可能重复:
Object comparison in JavaScript

我有两个原生 JavaScript 对象:

var foo = { hello: 'world', holy: { shit: 'batman' } };
var bar = { ... };

我想比较两者(foo == bar)。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

jQuery 没有用于比较对象的内置实用程序。从您的帖子中并不清楚您想从两个对象中获得什么信息。您要对它们进行排序吗?

不过,根据您要执行的操作,您可能能够通过使用 jQuery 的一种实用方法来满足您的用例。例如,请参阅:jQuery.extendjQuery.eachjQuery.mapjQuery.merge。 jQuery 主要关注操作 DOM 元素;它没有用于列表排序的内置功能(尽管您可能能够找到插件)。

查看 jQuery 实用程序文档:

http://api.jquery.com/category/utilities/

另外,请查看array.sort(),它显然是内置在 javascript 中的:

http://www.javascriptkit.com/javatutors/arraysort.shtml

【讨论】:

    【解决方案2】:

    这很好用,但仅在某些情况下:

    var obj1 = {n1: "v1", n2: "v2"},
        obj2 = {n1: "v1", n2: "v2"},
        obj3 = {n2: "v2", n1: "v1"},
        obj4 = {n2: "v2", n1: "v1", f: function(){}};
    
    
    // this will work correctly:
    JSON.stringify(obj1) == JSON.stringify(obj2); //true
    
    
    // but this fails :(
    JSON.stringify(obj2) == JSON.stringify(obj3); //false
    
    
    // and this :(
    JSON.stringify(obj3) == JSON.stringify(obj4); //true
    

    【讨论】:

    • 将对象与JSON.stringify 比较仅在某些时候起作用,因为键的顺序没有明确定义。在此示例中,属性恰好以相同的顺序迭代 - 并且在测试的特定实现中 - 但 此行为未定义且不应使用
    • 我认为可以修改这种方法(例如,按排序顺序使用键序列化对象)以解决 pst 描述的问题,不是吗?
    • 关注@user166390。仅当对象不包含函数、DOM 节点并且字段的顺序保持不变时,此方法才有效。它在比较来自某些 API 的 JSON 时起作用。但是,如果您比较自己创建的对象,为什么不使用唯一 ID?
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2012-01-21
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多