我有两个数组,一个看起来像:
["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 :(得分:1)
首先检查两个阵列的长度是否相同。然后迭代两者并检查所有相应的值是否严格相等(===)。
答案 1 :(得分: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
答案 2 :(得分:1)
您可以使用join来比较字符串,而不是循环。
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
答案 3 :(得分: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]);
}
然后无法保证枚举顺序,这可能就是你最终得到反转数组的原因。