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

时间:2014-03-14 03:01:49

标签: javascript jquery arrays

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

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

我试过这个

var array3 = array1 === array2   // returns false

10 个答案:

答案 0 :(得分:116)

您可以使用 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]; 
});

<强> THE WORKING DEMO.

答案 1 :(得分:35)

不太健全的方法,但它有效。

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

console.log(a===b);

答案 2 :(得分:10)

var array3 = array1 === array2

那将比较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; 
}

答案 3 :(得分:4)

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

&#13;
&#13;
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.');
}
&#13;
&#13;
&#13;

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

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

答案 4 :(得分:4)

更现代的版本:

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]);
}

将非数组参数强制转换为空数组会阻止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));
}

答案 5 :(得分:3)

使用lodash。 在ES6语法中:

var isEqual = require('lodash/isEqual');
var equal = isEqual([1,2], [1,2]);  // true

或以前的js版本:

{{1}}

答案 6 :(得分:1)

如果你比较2个数组但值不在同一个索引中,那么试试这个

var array1=[1,2,3,4]
var array2=[1,4,3,2]
var is_equal = array1.length==array2.length && array1.every(function(v,i) { return ($.inArray(v,array2) != -1)})
console.log(is_equal)

答案 7 :(得分:0)

这是代码。哪个能够按任何位置比较数组。

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

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

var is_same = array1.length == array2.length && array1.every(function(element, index) {
    //return element === array2[index];
  if(array2.indexOf(element)>-1){
    return element = array2[array2.indexOf(element)];
  }
});
console.log(is_same);

答案 8 :(得分:0)

function isEqual(a) {
if (arrayData.length > 0) {
    for (var i in arrayData) {
        if (JSON.stringify(arrayData[i]) === JSON.stringify(a)) {
            alert("Ya existe un registro con esta informacion");
            return false;
        }
    }
}
}

Check this example

答案 9 :(得分:-1)

尝试这样做:array1.compare(array2)=true

Array.prototype.compare = function (array) {
    // if the other array is a falsy value, return
    if (!array)
        return false;

    // compare lengths - can save a lot of time
    if (this.length != array.length)
        return false;

    for (var i = 0, l=this.length; i < l; i++) {
        // Check if we have nested arrays
        if (this[i] instanceof Array && array[i] instanceof Array) {
            // recurse into the nested arrays
            if (!this[i].compare(array[i]))
                return false;
        }
        else if (this[i] != array[i]) {
            // Warning - two different object instances will never be equal: {x:20} != {x:20}
            return false;
        }
    }
    return true;
}