Javascript 比较具有不同值位置的2个数组
我有两个未知数组,我想知道它们是否相等,无论元素的位置如何,例如:Javascript 比较具有不同值位置的2个数组,javascript,jquery,Javascript,Jquery,我有两个未知数组,我想知道它们是否相等,无论元素的位置如何,例如: 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 我应该先排序,然后比较吗?或者有更好的方法吗?您可以这样尝试: function checkTwoArray(arr, brr) { var a = arr.sort()
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
我应该先排序,然后比较吗?或者有更好的方法吗?您可以这样尝试:
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;
};
有两种解决方案,一种比另一种好 一个是,正如您所建议的,首先对数组进行排序,然后比较它们。(我也会推荐这个) 第二种方法是迭代一个数组,与第二个数组中的每个元素进行比较,并保存(并跳过)找到值的索引。 然而,最后一个解决方案有点慢,太复杂了 第二种方法的代码示例:
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;
}
功能比较(a、b)
{
如果(a.length!=b.length){返回false;}
var c=[];
对于(i=0;i,您可以进行排序、字符串化和比较,以检查数组是否相等:
i、 e.A.sort().join(',')==B.sort().join(',')
函数比较数组(a,b){
如果(a.length!=b.length)返回false;
a、 排序();
b、 排序();
对于(var i=0;对于第一种情况,它将返回false,OP期望为true。元素的位置应该被忽略。@Fyre:-更新了我的答案!谢谢。通常最好是在编写内容的基础上进行一些非代码解释。但在这种情况下,还有三个其他答案也可以“先排序,然后比较”,所以我不知道你在这个问题上添加了什么。(你需要自定义排序函数吗?)数组长度检查的顺序如何,然后排序和比较。当然不需要自定义排序函数。我想你需要一个分隔符。否则,[1,1]=[11].@Teepeemm-没错。谢谢你。编辑。
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;
}
var A = [1,3,7];
var B = [3,7,1];
console.log("Equal: " + (A.sort().join(',') === B.sort().join(','));
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;
}