繁体   English   中英

如何在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

UPDATE

Lodash的灵感来自下划线,但现在是卓越的解决方案

https://lodash.com/docs/#isEqual

在两个对象之间执行优化的深度比较,以确定它们是否应被视为相等。

var object = { 'a': 1 };
var other = { 'a': 1 };

_.isEqual(object, other);
// => true

object === other;
// => false

使用lodash

_.isEqual([1,2],[1,2])

也适用于对象。

_.isEqual({a:1}, {a:1})

数组是javascript中的对象。 并且使用==无法比较对象,就像比较字符串或数字时通常使用的那样。

还有很多其他比较数组的方法,我最喜欢的是使用JSON:

if ( JSON.stringify(a) == JSON.stringify(b) ) {
    // equal

请注意,将预先存在的对象分配给变量就像在写入b = a ,只是复制引用。 它们都指向同一个数组。

您必须执行b = a.slice()才能获得真实副本。

像你所写的JavaScript数组比较只是简单的对象引用比较。 它们不是逐个“深入”的比较。

您可以根据自己的需要编写自己的比较函数,以检查长度是否相同以及元素是否相同(无论是否顺序)。 编辑正如其他人所指出的,有几个库包含数组比较函数。 如果你发现一个符合你的“平等”定义(并非不可能),并且你不介意考虑将该库纳入你的架构,那可能是个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM