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

如何使用Javascript比较两个数组是否相等?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我希望数组的位置也一样,值也一样 var array1 = [4,8,9,10]; var array2 = [4,8,9,10]; 我试过这样做 var array3 = array1 === array2 // returns false 这将比较array1和array2在内存中是否是相同的数组对象,这不是您想要的 为了实现您想要的功能,您需要检查两个数组是否具有相同的长度,以及每个索引中的每个成员是否相同 假设数组中填充了原语、数字和/或字符串,这样做就可以了 function

我希望数组的位置也一样,值也一样

var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
我试过这样做

var array3 = array1 === array2   // returns false
这将比较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; 
}
函数arraysaridentical(arr1、arr2){
if(arr1.length!==arr2.length)返回false;
对于(变量i=0,len=arr1.length;i
您可以使用(IE<9和其他旧浏览器需要polyfill。)


试着这样做:
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;
}
Array.prototype.compare=函数(数组){
//如果另一个数组是falsy值,则返回
if(!数组)
返回false;
//比较长度-可以节省大量时间
if(this.length!=array.length)
返回false;
for(var i=0,l=this.length;i
如果比较两个数组,但值不在同一索引中,请尝试此操作

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)

你可以试试这个简单的方法

var数组1=[4,8,9,10];
var array2=[4,8,9,10];
console.log(array1.join(“|”);
console.log(array2.join(“|”);
if(array1.join('|')==array2.join('|')){
log('数组相等');
}否则{
log('数组不相等');
}
数组1=[[1,2]、[3,4]、[5,6]、[7,8];
数组2=[[1,2]、[3,4]、[5,6]、[7,8];
console.log(array1.join(“|”);
console.log(array2.join(“|”);
if(array1.join('|')==array2.join('|')){
log('数组相等');
}否则{
log('数组不相等');

}
这是一种不太可靠的方法,但它是有效的

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

console.log(a===b);

代码在这里。它可以按任意位置比较数组

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);
更现代的版本:

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()

使用lodash。 在ES6语法中:

import isEqual from 'lodash/isEqual';
let equal = isEqual([1,2], [1,2]);  // true
或以前的js版本:

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


以上是与顺序无关的,OP询问关于顺序保留的问题。感谢您的帮助。这里有一把小提琴可以玩(相同的答案,不同的迭代方式):这里有一个多维数组版本:我可以使用这个吗。它也可以正常工作。这个答案也可以在这里找到:。请注意,它只适用于浅相等(这对于OP给出的示例来说是完全正确的)。只有一点改进:
(array1.length==array2.length)
<代码>=
而不是
=
。原始问题说明位置和值必须相同。如果位置不重要,则可以先对两个数组进行排序。转换为字符串是不可靠的,因为当第一个数组是
[4,8,9,10]
而第二个数组是
[“4 | 8”,9,10]时,转换失败
例如,这对我来说是一个更简单的解决方案,我正在比较两个矩阵之间的精确值,并且我的数组中没有按位OR运算符@Broxzier如果数组元素的顺序不相同,该怎么办?如果您知道数组的顺序是相同的(就像我所做的),那么这将无法完美地工作。但是,您可以通过
sort()
对数组元素进行排序,这应该可以解决op的问题。如果a=
[2,4,5].toString()
和b=
[2,4,5].toString()
,这种方法给出了错误的答案。我相信JSON.jstringify对于通用情况会更好。然而,就我所理解的@Andersongreen而言,这里的一条经验法则是不要弄乱你不拥有的东西<代码>数组。prototype是类型数组的内置prototype对象,在团队中工作时会导致不一致。谢谢!我在用这个!我理解这是多么简洁。上面的代码在很多情况下更有用。我在用我自己。不幸的是,这会带来误报。例如:
arraysEqual(23,”)
这是故意的。非数组==非数组我认为是否应该允许
arraysEqual
接收非数组输入是有争议的。也就是说,意识到前面提到的“gotcha”仍然很好。我的假设是,最好对输入进行清理,而不是将每个调用都包装在
try/catch
块中,以免它轰炸您的程序。对于使用非数组参数调用它应该做什么,这是一个设计决策。如果你想把它扔进这个箱子里,那就去吧。
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));
}
import isEqual from 'lodash/isEqual';
let equal = isEqual([1,2], [1,2]);  // true
var isEqual = require('lodash/isEqual');
var equal = isEqual([1,2], [1,2]);  // true
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;
        }
    }
}
}