查找所有不同嵌套数组元素的Javascript最佳实践

查找所有不同嵌套数组元素的Javascript最佳实践,javascript,jquery,arrays,recursion,Javascript,Jquery,Arrays,Recursion,有两个大的、可能非常大的嵌套javascript数组。一个是当前的,另一个是此数组的上一次迭代。函数将需要找到所有不同的元素,并对任何更改采取行动 我知道如何制作一个函数来实现这一点,我想知道做这样一件事的最佳实践是什么。任何好的建议都将不胜感激。我正在考虑使用原生JavaScript和jQuery处理对不同元素的响应 这个问题涉及几件事。 比较对象最有效的方法是什么。在javascript检查中,通过if,如果一个对象等于或不等于另一个对象,将始终说它不等于,即使它们相等。因此,需要对对象进行

有两个大的、可能非常大的嵌套javascript数组。一个是当前的,另一个是此数组的上一次迭代。函数将需要找到所有不同的元素,并对任何更改采取行动

我知道如何制作一个函数来实现这一点,我想知道做这样一件事的最佳实践是什么。任何好的建议都将不胜感激。我正在考虑使用原生JavaScript和jQuery处理对不同元素的响应

这个问题涉及几件事。

  • 比较对象最有效的方法是什么。在javascript检查中,通过if,如果一个对象等于或不等于另一个对象,将始终说它不等于,即使它们相等。因此,需要对对象进行分解和比较

  • 返回结果的最佳方式是什么?你们有并没有列出一系列的差异?在遍历第一个数组时,您是清除与第一个数组中的对象相同的对象,还是创建一个全新的数组返回


  • 就我个人而言,我认为递归对于这种情况是一种很好的实践

    console.clear();
    // Compare 2 nested arrays, do something if values don't match
    function CompareArrays(arr1, arr2){
    
        for(var i=0;i<arr1.length;i++){
            if( typeof arr1[i] === "object"){
                // traverse into nested array
                CompareArrays( arr1[i], arr2[i] );
            }else{
                if (arr1[i] != arr2[i]){
                    // do something!
                    console.log( "mismatch @ "+ i +" a1: "+arr1[i]+" a2: "+ arr2[i]);
                }
            }
        }
    }
    
    var a1 = [1,2,3,["a","b","c"],4,5,6,["d","e","f"]];
    var a2 = [1,2,55,["a","tt","c"],4,5,6,["d","e","f"]];
    
    CompareArrays( a1, a2);
    
    console.clear();
    //比较两个嵌套数组,如果值不匹配,请执行某些操作
    功能比较阵列(arr1、arr2){
    对于(var i=0;i


    这将查看给定的第二个元素。并对其进行修改以删除任何共享的相等值。数组仍将保持不变,但所有相同的值现在都未定义。

    查看lodash库是如何执行此操作的。不同的元素,如在比较2时它们的显示顺序不同?或者我们正在查看2个数组中包含的内容总的来说,与顺序无关?也许你可以告诉我们你目前正在做什么,然后你可以得到一些关于最佳实践的意见。不幸的是,这个问题目前“不是一个真正的问题”syndrome.replicate of and of.这两个Brock都不处理嵌套数组。这只是如何处理,正如我知道如何处理的主题中所述。我想知道这样做的最佳方法是什么。这假设a1中的所有键都在a2中。a2不会有不同的键。是的,当然。你没有说数组会不同尺寸也一样。
    function CompareArrays(arr1, arr2){    
        for(var key in arr1){
            if( arr1[key] !== arr2[key]){
                // traverse into nested array
                if(typeof(arr1[key]) == 'object' || typeof(arr2[key]) == 'object'){                
                    CompareArrays( arr1[key], arr2[key]);
                }
            }else{
                    delete arr2[key];
            }
        }
    }
    
    var a1 = [1,2,3,["a","b","c"],4,5,6,["d","e","f"]];
    var a2 = [1,2,5445,["a","tt","c"],4,5,336,["d","edee","ffdf"], 'blablabla', 'I\'m extra'];
    
    CompareArrays( a1, a2 );
    console.log(a2);