javascript - 概念 : Comparing objects and arrays like atrings and numbers in JavaScript

标签 javascript function arguments comparison object-comparison

<分区>

有没有办法通过字面值(如字符串或数字)比较两个未引用的对象?

_is = function (a, b) {/* 代码 */}

这可以适用于任何对象类型,甚至是自定义对象。

_is(new X("a"), new X("a"));//返回真;

_is(new X("a"), new Y("a"));//返回假

你可以把它转换成一个字符串,但那会很草率。

JSON.stringify({ x: "a"}) == JSON.stringify({ x: "a"});//返回真值

也许有一种方法可以以编程方式读取对象的每个键、子键和值,并以这种方式进行比较。

有什么想法吗?

最佳答案

Javascript 使用唯一的内存指针对内存中的对象进行哈希处理。您实质上是在创建两个单独的对象,并尝试比较它们。尽管它们看起来相似,但实际上它们是不同的。

首先尝试将对象存储为变量,然后针对该变量进行测试。

pass = arg => { return arg }; pass({ a: "x" }); // Returns The Input

pass(({ a: "x" })) == ({ a: "x" }); // Returns False

var obj = {a: "x"};

pass(obj) === (obj); // Returns true

console.log(pass(obj) === (obj));

更新:

如果您想比较两个单独的对象,我发现最好和最有效的方法是创建两个对象的散列,然后比较散列(基本上是比较两个校验和)。如果哈希匹配,则对象相同。如果哈希值不同,则它们是不同的对象。您可以假设每个对象的属性和值都相同,因为使用散列函数,甚至可以利用某些形式的加密(如 md5 和 sha)中使用的散列函数来生成对象的唯一散列。

Here's a 3rd Party Library I've used before to generate object hashes .

关于javascript - 概念 : Comparing objects and arrays like atrings and numbers in JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43621166/

相关文章:

javascript - 从 JSON 对象的内部深处获取信息

Javascript - 复制淡入淡出

function - 如何检查Haskell项目中函数调用的参数过多还是过少

c++ - 我在 C++ 中是什么意思?

powershell - 如何在Powershell中将变量作为参数传递给带有引号的命令

java - 受本地类影响的参数生命周期 : possible pitfalls?

javascript - Express.js 参数列表后缺少 )

javascript - 带循环的主干 View 渲染没有数据?

javascript - 使用 Javascript 拆分由 '&' 分隔的键值对响应

更改 HTML 的 JavaScript 函数不起作用