我有一小段代码,其中数组填充了数组。最后,我有 n 成员数组的这个数组。这些子数组总是具有相同数量的相同类型(数字)的成员(2)。我需要知道这些子阵列是否都是相同的(相同的成员,相同的位置)。这总是返回false:
[2, 0] === [2, 0]
在我的头脑中,我可以想到两种比较方式。
我认为我采取了错误的方式。你觉得怎么样?
答案 0 :(得分:2)
为了我自己的想法,我认为使用循环比较两个数组是正确的。
var isTheSame = true;
for (var i in array1) {
if (array1[i] !== array2[i]) isTheSame = false;
}
上面的循环有效,它将返回任何与类型不同的元素(三个等号===),或者值,或者长度甚至是键。
你的第二个建议不应该像第一个那样完全一样,因为你已经将它转换为一个字符串,如果array1 [0] =“true”和array2 [0] = true会发生什么?它会返回true,因为现在所有这些都是字符串,但你需要正确的比较吗?
这是我自己的想法,我希望它可能会有所帮助。
此致 [X]
答案 1 :(得分:2)
a=[2,0]; b=[2,0]; a.toString() == b.toString();
也许不是最有效的,但似乎有效,而且我是更短,更易读的解决方案的坚定支持者。
请注意xx3004关于转换为字符串时丢失的类型数据的观点值得考虑,除非您确定您的数组将由相同的数据类型组成。
答案 2 :(得分:1)
您可以使用以下内容来判断两个一维数组是否相同。如果你添加尺寸,它需要递归,但我认为这足以满足你的要求。
function testArray(a, b) {
var aLen = a.length;
var bLen = b.length;
if (aLen === bLen) { // check for identical length first
for (var i = 0; i < aLen; i++) {
if (a[i] !== b[i]) {
return false; // members don't match
}
}
return true; // all members matched
}
return false; // not same length
}
答案 3 :(得分:1)
这就是我想出来的......
var arrayCompare = function(a, b) {
var aLength = a.length,
bLength = b.length;
if (aLength != bLength) {
return false;
}
for (var i = 0; i < aLength; i++) {
if (a[i] !== b[i]) {
return false;
}
}
return true;
}
答案 4 :(得分:1)
这是一种比较两个数组的简单方法,建立在toString
想法的基础上(即使是多维数据也可以):
function compareArrays(a1, a2) {
return JSON.stringify(a1) == JSON.stringify(a2);
}
compareArrays([[2,3],[7,4],[3,3]], [[2,3],[7,4],[3,3]]) // true
compareArrays([[2,3],[7,4],[3,3]], [[7,4],[2,3],[3,3]]) // false
答案 5 :(得分:0)
如果你愿意使用Underscore,这只是一个很好的工具(我认为它比jQuery更多甚至更高),你可以大大简化这段代码。在比较数组时你不需要嵌套:我会事先弄平它们。然后它只是一个循环:
function cmpArrays( arr1, arr2 ){
var flat = _.zip( _.flatten( arr1 ), _.flatten( arr2 ) );
for( var elem in flat ){
if( flat[elem][0] !== flat[elem][1] ){
return false;
}
}
return true;
}
将其概括为适用于任意数量的数组也应该非常简单。