我有两个未知数组,我想知道它们是否相等,无论它们的元素位置如何,例如:
A = [1,3,7]
B = [3,7,1]
-> return true
A = [1,3]
B = [1,3,7]
-> return false
A = [1,3,7]
B = [1,4]
-> return false
我应该先排序,然后进行比较吗?或者有更好的方法吗?
答案 0 :(得分:1)
var areEqual = $(A).not(B).length == 0 && $(B).not(A).length == 0;
答案 1 :(得分:0)
您可以尝试这样:
function checkTwoArray(arr, brr) {
var a = arr.sort();
var b= brr.sort();
var i = a.length;
if (i != b.length) return false;
while (i--) {
if (a[i] !== b[i]) return false;
}
return true;
};
答案 2 :(得分:0)
有两个解决方案,一个比另一个好。
正如您所建议的那样,首先对数组进行排序然后进行比较。 (我也建议这个)
第二种方法是迭代一个数组,与第二个数组中的每个元素进行比较,并保存(和跳过)找到值的索引。 然而,最后一个解决方案有点慢而且太复杂了
第二个代码示例:
function compare(a, b)
{
if(a.length != b.length) { return false; }
var c = [];
for(i=0;i<a.length;i++)
{
var f = false;//current value found in second array
for(j=0;j<b.length;b++)
{
if(j in c) { continue; }//array c contains value j, so at this index, a value from 'a' is found in 'b' (maybe some other code should be used here, like indexOf() or jQuery.inArray())
if(a[i] == b[j]) { c.push(j); f = true; }
}
if(!f)
{
return false;
}
}
return true;
}
我不完全确定这段代码实际上是否有效(我还没有测试过)。
答案 3 :(得分:0)
您可以对字符串进行排序和比较,以检查数组是否相等:
即。 A.sort().join(',') === B.sort().join(',')
var A = [1,3,7];
var B = [3,7,1];
console.log("Equal: " + (A.sort().join(',') === B.sort().join(','));
答案 4 :(得分:0)
function compareArray(a, b) {
if (a.length != b.length) return false;
a.sort();
b.sort();
for (var i=0; i<b.length; i++){
if (a[i] != b[i]) return false;
}
return true;
}