Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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 比较两个数组的元素_Javascript_Arrays_Comparison - Fatal编程技术网

Javascript 比较两个数组的元素

Javascript 比较两个数组的元素,javascript,arrays,comparison,Javascript,Arrays,Comparison,我有两个javascript数组,我需要比较它们。例如,假设我有两个数组: var array1 = ["1", "2", "3", "4"]; var array2 = ["4", "1", "3", "2"]; 这些数组实际上是相等的,我想通过比较得到true。做这件事的最佳和最快的方法是什么?最好和最快的方法是使用对象来跟踪的值及其计数。然后我们可以看到它是否存在于第二个数组中。试试这个 function compare(arr1, arr2){ var obj={}, len

我有两个javascript数组,我需要比较它们。例如,假设我有两个数组:

var array1 = ["1", "2", "3", "4"];
var array2 = ["4", "1", "3", "2"];

这些数组实际上是相等的,我想通过比较得到
true
。做这件事的最佳和最快的方法是什么?

最好和最快的方法是使用对象来跟踪的值及其计数。然后我们可以看到它是否存在于第二个数组中。试试这个

function compare(arr1, arr2){
    var obj={}, len = arr1.length, i=0, isSame=true, prop;
    if(arr1.length === arr2.length){
        for(;i<len;i++){
            if(obj[arr1[i]]){
                obj[arr1[i]] = obj[arr1[i]]+1;
            } else{
                obj[arr1[i]] =1;
            }
        }
        i=0, len = arr2.length;
        for(;i<len;i++){
            if(obj[arr2[i]]){
                obj[arr2[i]] = obj[arr2[i]]-1;
            } else{
                isSame = false;
                break;
            }
        }
        for (prop in obj){
            if(obj[prop] > 0){
                isSame = false;
                break;
            }
        }
    }else{
        isSame = false;
    }
    return isSame;

}
功能比较(arr1、arr2){
var obj={},len=arr1.length,i=0,isSame=true,prop;
if(arr1.length==arr2.length){

对于(;i您真正拥有的是两个集合,而不是数组,但不幸的是JavaScript没有提供任何类型的“集合”数据类型。进行此类检查的最简单方法是使用某种功能性JavaScript库,如lodash

使用它使这变得非常简单

function setsEqual(a, b) {
  var u = _.union(a, b);
  return u.length === a.length && u.length === b.length;
}

如果要在没有外部库的情况下执行此操作,可以使用


尝试删除匹配元素,直到两个元素都为空:

var array1 = ["1", "2", "3", "4", "1", "5"];
var array2 = ["1", "5", "2", "3", "4", "1"];
var isSame = false;
if(array1.length != array2.length)
    isSame = false;
else
{
    for(var i = 0; i < array1.length; i ++)
    {
        var removed = false;
        for(var j = 0; j < array2.length; j ++)
        {
            if(array2[j] == array1[i])
            {
                //  remove from array2
                array1.splice(i, 1);
                //  remove from array1
                array2.splice(j, 1);
                //  go back 1 for i
                removed = true;
                i --;
                break;
            }
        }
        if(!removed)
            break;
}

    if(array1.length == 0 && array2.length == 0)
        isSame = true;
}
var数组1=[“1”、“2”、“3”、“4”、“1”、“5”];
变量array2=[“1”、“5”、“2”、“3”、“4”、“1”];
var IsName=false;
if(array1.length!=array2.length)
IsName=假;
其他的
{
对于(变量i=0;i
我不认为这是一种最快的方法,但它对于带有原语的小数组非常有用

function compareArrays(a, b) {
  var copyA = a.slice(),
      copyB = b.slice();

  if (a.length !== b.length) { return false; }
  return copyA.sort().toString() === copyB.sort().toString();

}比较两个数组后,从函数返回状态

arr1=[101,12,13,10,4];
arr2=[101,4,12,13,10];
函数比较器阵列(arr1、arr2){
返回arr1.length==arr2.length&&
arr1.sort().every((val,index)=>val==arr2.sort()[index]);
}  

控制台日志(CompareTowarray(arr1,arr2))
您的数组可以重复相同的值?是的,可能它们有一些重复的值。我真诚地希望下面的否决票不是来自您,OP。不,我没有否决任何答案。嗯,那么正常的索引检查将不起作用,我们需要一个数字重复的次数。我在我的解决方案中捕捉到了这一点,以及时间复杂性是O(n),空间复杂度也是O(n),直到Js得到一些新函数来快速完成这项工作,这是最快的方法。
function compareArrays(a, b) {
  var copyA = a.slice(),
      copyB = b.slice();

  if (a.length !== b.length) { return false; }
  return copyA.sort().toString() === copyB.sort().toString();