2011-10-08 34 views
3

我有两个数组,一个看起来像:这些数组之间的差异以及如何比较它们?

["ssewweewewzad0xsis", "sasasaasasaas", "ddwdwd", "ffdfdfdffdfdf", "rffrfrfrfrfrrf", "rffrfrfrffrfrfrfbyzad0xsis 
", "dsdssddssd", "ssdsddssd"] 

其他看起来像:

[ 
Array[8] 
0: "ssdsddssd" 
1: "dsdssddssd" 
2: "rffrfrfrffrfrfrfbyzad0xsis↵" 
3: "rffrfrfrfrfrrf" 
4: "ffdfdfdffdfdf" 
5: "ddwdwd" 
6: "sasasaasasaas" 
7: "ssewweewewzad0xsis" 
length: 8 
__proto__: Array[0] 

什么是它们之间的差异(在Chrome中开发者控制台获取)我如何检查它们是否一样?

第一个来自解析的JSON,第二个是var array = new Array();,其值通过array.push()添加。

+0

数组中的第二个数组?它显示为“[Array [8]]”吗? – pimvdb

+0

它在开发人员工具中显示为http://p.fr.am/AXRu,但是我刚开始学习jQuery,并且我不知道它到底是什么 – pmerino

+0

请将从一个副本到另一个副本的代码发布到其他。 – Alnitak

回答

1

从你的屏幕截图看来,它是一个数组内的数组。

要获得嵌套数组,可以使用theArray[0]

例如:

var arr = [1, 2, 3], // shows up as [1, 2, 3] 
    arr2 = [arr];  // shows up as [ Array[3] ] which you can expand 
         // with the arrow 

然后:

arr2[0] === arr; 

为了比较,这取决于是否阵列参考同样的事情。

如果是这样,请使用arr2[0] === arr

否则,您可以使用互联网上可用的算法之一。在Chrome中,这是可能做到这一点还有:

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

a === b;   // false 
a <= b && a >= b; // true 
1

首先检查两个阵列的长度是否相同。然后遍历两者并检查所有对应的值是否严格相等(===)。

+0

它也是一个好主意,先排序他们:-) – Pointy

+0

@有点更基本的问题是_why_是第二次逆转? – Alnitak

1

而是一个循环中,您可以使用加入比较字符串。

function checkArrays(arrA, arrB){ 

    //check if lengths are different 
    if(arrA.length !== arrB.length) return false; 


    //slice so we do not effect the orginal 
    //sort makes sure they are in order 
    //join makes it a string so we can do a string compare 
    var cA = arrA.slice().sort().join(""); 
    var cB = arrB.slice().sort().join(""); 

    return cA===cB; 

} 

var a = [1,2,3,4,5]; 
var b = [5,4,3,2,1]; 
var c = [1,2,3,4]; 
var d = [1,2,3,4,6]; 
var e = ["1","2","3","4","5"]; //will return true 

console.log(checkArrays(a,b)); //true 
console.log(checkArrays(a,c)); //false 
console.log(checkArrays(a,d)); //false 
console.log(checkArrays(a,e)); //true 

唯一的问题是如果你关心上次比较测试的类型。 如果你关心类型,你将不得不循环。

function checkArrays(arrA, arrB){ 

    //check if lengths are different 
    if(arrA.length !== arrB.length) return false; 

    //slice so we do not effect the orginal 
    //sort makes sure they are in order 
    var cA = arrA.slice().sort(); 
    var cB = arrB.slice().sort(); 

    for(var i=0;i<cA.length;i++){ 
     if(cA[i]!==cB[i]) return false; 
    } 

    return true; 

} 

var a = [1,2,3,4,5]; 
var b = [5,4,3,2,1]; 
var c = [1,2,3,4]; 
var d = [1,2,3,4,6]; 
var e = ["1","2","3","4","5"]; 

console.log(checkArrays(a,b)); //true 
console.log(checkArrays(a,c)); //false 
console.log(checkArrays(a,d)); //false 
console.log(checkArrays(a,e)); //false 
1

我理解你的问题实际上是问“是这两个结构实际上相当于”而不是要求更通用的问题:“我怎么写代码来比较两个数组”。

简单的答案是(可能的例外是一个不正确的两级嵌套),两个数组是结构上相同。然而由于某种原因,其中一个阵列被颠倒了。

你是如何复制它们的?最简单的方法就是这样的:

var copy = []; 
for (var i = 0; i < orig.length; ++i) { 
    copy.push(orig[i]); 
} 

或更平凡:

var copy = [].concat(orig); 

相反,如果你使用了以下(不正确)代码:

for (var i in orig) { 
    copy.push(orig[i]); 
} 

然后枚举顺序不保证,这可能是你为什么最终倒序数组。

相关问题