![](/img/trans.png)
[英]How can i check if two arrays of objects are equal with javascript?
[英]How can I check if arrays are equal in javascript?
看看这个代码示例或转到jsfiddle
function printRelation(a, b, out) {
var text;
if (a === b) {
text = "a === b";
} else if (a == b) {
text = "a == b";
} else {
text = "a != b";
}
$('#' + out).text(text);
}
var a = [0, 0, 2], b = a;
printRelation(a, b, 'out1');
a = [0, 0, 2];
b = [0, 0, 2];
printRelation(a, b, 'out2');
我原本期望两个测试都输出a === b
,但只有第一个输出。 第二个输出a != b
。 谁能解释这种行为? 如何在javascript中有效地比较数组?
您可以使用Underscore.js库的isEqual方法。
http://underscorejs.org/#isEqual
在两个对象之间执行优化的深度比较,以确定它们是否应被视为相等。
var moe = {name : 'moe', luckyNumbers : [13, 27, 34]};
var clone = {name : 'moe', luckyNumbers : [13, 27, 34]};
moe == clone;
=> false
_.isEqual(moe, clone);
=> true
Lodash的灵感来自下划线,但现在是卓越的解决方案
https://lodash.com/docs/#isEqual
在两个对象之间执行优化的深度比较,以确定它们是否应被视为相等。
var object = { 'a': 1 };
var other = { 'a': 1 };
_.isEqual(object, other);
// => true
object === other;
// => false
数组是javascript中的对象。 并且使用==
无法比较对象,就像比较字符串或数字时通常使用的那样。
还有很多其他比较数组的方法,我最喜欢的是使用JSON:
if ( JSON.stringify(a) == JSON.stringify(b) ) {
// equal
请注意,将预先存在的对象分配给变量就像在写入b = a
,只是复制引用。 它们都指向同一个数组。
您必须执行b = a.slice()
才能获得真实副本。
像你所写的JavaScript数组比较只是简单的对象引用比较。 它们不是逐个“深入”的比较。
您可以根据自己的需要编写自己的比较函数,以检查长度是否相同以及元素是否相同(无论是否顺序)。 编辑正如其他人所指出的,有几个库包含数组比较函数。 如果你发现一个符合你的“平等”定义(并非不可能),并且你不介意考虑将该库纳入你的架构,那可能是个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.