Javascript 如何检查两个数组是否相等?

Javascript 如何检查两个数组是否相等?,javascript,arrays,Javascript,Arrays,我试图比较两个数组是否相等。我正在分解数组a,最后将它们存储到两个不同的数组b和c。最后,我正在控制台中检查数组b和c 控制台显示相等的值,但当我比较两个数组时,我得到的数组不相等 这是我的密码: var a = [1,2,3,4,3,2,1]; var b = []; var c = []; var t = 0; var length = a.length; console.log("is the array length" + length); if (length %2 !== 0) {

我试图比较两个数组是否相等。我正在分解数组
a
,最后将它们存储到两个不同的数组
b
c
。最后,我正在控制台中检查数组
b
c

控制台显示相等的值,但当我比较两个数组时,我得到的数组不相等

这是我的密码:

var a = [1,2,3,4,3,2,1];
var b = [];
var c = [];
var t = 0;
var length = a.length;

console.log("is the array length" + length);
if (length %2 !== 0) {
    var mid = parseInt(length/2)-1;
    console.log(a[mid]);
    for(var j=length-1; j>(mid+1); j--) {
        c[t] = a[j];
        t++;
    }
    for(var i=0; i<=mid; i++) {
        b[i] = a[i];
    }
    console.log(c);
    console.log(b);

    if(b == c) { //comparing the array b and c
        console.log("true");
    }
    else {
        console.log("no")
    }
}
var a=[1,2,3,4,3,2,1];
var b=[];
var c=[];
var t=0;
变量长度=a.长度;
log(“是数组长度”+长度);
如果(长度%2!==0){
var mid=parseInt(长度/2)-1;
console.log(a[mid]);
对于(var j=length-1;j>(mid+1);j--){
c[t]=a[j];
t++;
}

for(var i=0;i取决于您对“相等”的定义-如果两个数组在同一位置包含相同的元素,您可以使用
every

let areEqual = a.length === b.length && a.every((item, index) => b[index] === item);
如果您只想检查它们是否包含相同的元素,您仍然可以使用
every
,而无需进行索引检查:

let areEqual = a.length === b.length && a.every(item => b.indexOf(item) > -1);

首先,分割数组的代码过于复杂。您可以简单地进行切片:

 var a= [1,2,3,4,3,2,1],
 mid = Math.floor(a.length/2),
 b = a.slice(0,mid),
 c = a.slice(mid).reverse();
要比较两个数组,您可以创建一个字符串(因为您可以轻松比较字符串):

或者迭代并检查以下各项:

if( b.length === c.length 
    && b.every((v,i)=> v === c[i])) alert("equal");

如果您只想比较a是否为年鉴,则更容易:

var a= [1,2,3,4,3,2,1];

if( a.every((v,i)=>v===a[a.length-1-i]) ) alert("anagram!");

它太长了,但您可以使用:


/*$(函数(){
$(“.nav项”)。单击(函数(){
$(“.nav项”)。每个(函数(){
$(this.find(“a”).removeClass(“active”);
});
$(this.find(“a”).addClass(“active”);
});
});*/
//如果重写现有方法,则发出警告
if(Array.prototype.equals)
console.warn(“覆盖现有的Array.prototype.equals。可能的原因:新API定义了方法,存在框架冲突,或者代码中包含了双重内容。”);
//将.equals方法附加到数组的原型以在任何数组上调用它
Array.prototype.equals=函数(数组){
//如果另一个数组是falsy值,则返回
if(!数组)
返回false;
//比较长度-可以节省大量时间
if(this.length!=array.length)
返回false;
for(var i=0,l=this.length;i(中间+1);j--){
c[t]=a[j];
t++;
}

for(var i=0;i数组永远不相等。它们存储在不同的mem位置。所以我无法比较两个数组??我想要数组C以相反的方式,所以我使用for循环以相反的顺序获得它…因为我无法使用slice方法来实现这一点。@ashish sah,这就是为什么.reverse()对。。。
var a= [1,2,3,4,3,2,1];

if( a.every((v,i)=>v===a[a.length-1-i]) ) alert("anagram!");