Search code examples
javascriptarrayslodasharray-difference

How to get the difference between two arrays?


I have 2 arrays:

arr1 = [[11,12],[11,13],[11,14], [12,13]];
arr2 = [[11,13],[11,14]];

Expected result [[11,12],[12,13]].

How can I get the difference between the two arrays? I use lodash _.difference but it gives me a wrong answer.


Solution

  • Using just javascript, and only for this and similar examples

    var a1 = [[11,12],[11,13],[11,14], [12,13]];
    var a2 = [[11,13],[14,11]];
    var a3 = a1.filter(ar1 => !a2.some(ar2 => ar1.every(n1 => ar2.includes(n1))))
    console.log(a3); // [[11,12],[12,13]]
    

    There are too many criteria to create a generic solution.

    For example is [11,12] the same as [12,11], maybe only references to the same array are the same, (ar1 === ar2) as true. What if there are two identical entries in the same array and one in the other, do you filter one out, or keep it? The number of questions can go on for some time and it gets worse the deeper the nesting and the greater the number of types stored in the array.

    var a1 = [[11,12],[11,13],[11,14], [12,13]]
    var a2 = [[11,13],[14,11],[12,14]];
    a3 = [];
    [[a1,a2],[a2,a1]].forEach(a=>{
        a3.push(...a[0].filter(
            ar1 => !a[1].some(
                ar2 => ar1.every(
                    n1 => ar2.includes(n1)
                )
            )
        ))
    });
    console.log("[["+a3.join("], [")+"]]")