如何使用Javascript比较两个数组是否相等?

Sud*_*n S 41 javascript arrays jquery

我希望数组的位置也相同,值也相同.

var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
Run Code Online (Sandbox Code Playgroud)

我试过这样的

var array3 = array1 === array2   // returns false
Run Code Online (Sandbox Code Playgroud)

xda*_*azz 124

您可以使用Array.prototype.every().(IE <9和其他旧浏览器需要填充.)

var array1 = [4,8,9,10];
var array2 = [4,8,9,10];

var is_same = (array1.length == array2.length) && array1.every(function(element, index) {
    return element === array2[index]; 
});
Run Code Online (Sandbox Code Playgroud)

工作演示.

  • @ahmelq 抱歉,但它不起作用。[1,2,2,3] 与 [1,2,3,4] 相比返回 true (3认同)
  • 我能用这个吗?它也工作正常. (2认同)
  • 只有一点点改进:`(array1.length === array2.length)`。`===` 而不是 `==`。 (2认同)
  • 如果顺序不重要:`(array1.length == array2.length) &amp;&amp; array1.every(el =&gt; array2.includes(el))` (2认同)

小智 36

一种不太健壮的方法,但它的工作原理.

a = [2, 4, 5].toString();
b = [2, 4, 5].toString();

console.log(a===b);
Run Code Online (Sandbox Code Playgroud)

  • 如果数组元素的顺序不一样怎么办?这不行 (9认同)
  • 如果a =`[2,4,5] .toString()`和b =`["2,4",5] .toString()`,这种方法给出了错误的答案. (7认同)
  • 如果你知道数组的顺序是相同的(就像我一样),那么效果很好.但是你可以通过`sort()`对数组元素进行排序,然后这应该解决op的问题. (5认同)

Ada*_*kis 10

var array3 = array1 === array2
Run Code Online (Sandbox Code Playgroud)

这将比较array1和array2是否是内存中的相同数组对象,这不是你想要的.

为了做你想做的事,你需要检查两个数组是否具有相同的长度,并且每个索引中的每个成员是相同的.

假设您的数组充满了原语 - 数字和/或字符串 - 这样的事情应该这样做

function arraysAreIdentical(arr1, arr2){
    if (arr1.length !== arr2.length) return false;
    for (var i = 0, len = arr1.length; i < len; i++){
        if (arr1[i] !== arr2[i]){
            return false;
        }
    }
    return true; 
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个小提琴(相同的答案,不同的迭代方式):http://jsfiddle.net/jimschubert/85M4z/ (3认同)

Ste*_*all 6

您可以尝试这种简单的方法

var array1 = [4,8,9,10];
var array2 = [4,8,9,10];

console.log(array1.join('|'));
console.log(array2.join('|'));

if (array1.join('|') === array2.join('|')) {
	console.log('The arrays are equal.');
} else {
	console.log('The arrays are NOT equal.');
}

array1 = [[1,2],[3,4],[5,6],[7,8]];
array2 = [[1,2],[3,4],[5,6],[7,8]];

console.log(array1.join('|'));
console.log(array2.join('|'));

if (array1.join('|') === array2.join('|')) {
	console.log('The arrays are equal.');
} else {
	console.log('The arrays are NOT equal.');
}
Run Code Online (Sandbox Code Playgroud)

如果值的位置不重要,则可以先对数组进行排序。

if (array1.sort().join('|') === array2.sort().join('|')) {
    console.log('The arrays are equal.');
} else {
    console.log('The arrays are NOT equal.');
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*d G 5

一个更现代的版本:

function arraysEqual(a, b) {
  a = Array.isArray(a) ? a : [];
  b = Array.isArray(b) ? b : [];
  return a.length === b.length && a.every((el, ix) => el === b[ix]);
}
Run Code Online (Sandbox Code Playgroud)

将非数组参数强制为空数组a.every()不会爆炸。

如果您只想查看数组是否具有相同的元素集,则可以使用Array.includes()

function arraysContainSame(a, b) {
  a = Array.isArray(a) ? a : [];
  b = Array.isArray(b) ? b : [];
  return a.length === b.length && a.every(el => b.includes(el));
}
Run Code Online (Sandbox Code Playgroud)