Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较具有不同值位置的2个数组_Javascript_Jquery - Fatal编程技术网

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;
 }