[英]Comparing Arrays
我有一小段代码,其中一个数组填充了 arrays。 最后,我得到了这个包含n 个成员 arrays 的数组。 这些子数组始终具有相同数量的相同类型(数量)的成员 (2)。 我需要知道这些子数组是否都相同(相同的成员,相同的位置)。 这总是返回 false:
[2, 0] === [2, 0]
在我的脑海中,我可以想到两种比较方法。
我认为我采取了错误的方式。 你怎么看?
对于我自己的想法,我认为使用循环比较两个数组是正确的。
var isTheSame = true;
for (var i in array1) {
if (array1[i] !== array2[i]) isTheSame = false;
}
上面的循环有效,它将返回 false 任何与类型(三个等号 ===)、值、长度甚至键不同的元素。
你的第二个建议不应该和第一个一样工作,因为你已经将它转换成一个字符串,如果 array1[0] = "true" 和 array2[0] = true 会发生什么? 它将返回 true,因为现在它们都是字符串,但是您需要精确比较对吗?
这是我自己的想法,希望能有所帮助。
问候,[x]
a=[2,0]; b=[2,0]; a.toString() == b.toString();
也许不是最有效的,但它似乎有效,而且我强烈支持更短、更易读的解决方案。
请注意,xx3004 关于转换为字符串时丢失类型数据的观点是需要考虑的,除非您确定您的 arrays 将由相同的数据类型组成。
您可以使用以下内容来判断两个一维 arrays 是否相同。 如果您添加维度,它需要是递归的,但我认为这足以满足您的要求。
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
}
这就是我想出的...
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;
}
这是一个比较两个 arrays 的简单方法,基于您的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
如果你愿意使用Underscore ,这是一个很棒的工具(我认为它与 jQuery 一样甚至更高),你可以大大简化这段代码。 在比较 arrays 时不需要嵌套:我会事先将它们展平。 然后它只是一个循环:
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;
}
将其概括为与任意数量的 arrays 一起工作也应该非常简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.