如何找到阵列和阵列阵列之间的差异

如何找到阵列和阵列阵列之间的差异

问题描述:

x = [1, 2,3, 5]; y = [1, [2], [3, [[4]]],[5,6]])); 

我必须找到这两个阵列之间的区别。如何找到阵列和阵列阵列之间的差异

function arr_diff (a1, a2) { 

    var a = [], diff = []; 

    for (var i = 0; i < a1.length; i++) { 
     a[a1[i]] = true; 
    } 

    for (var i = 0; i < a2.length; i++) { 
     if (a[a2[i]]) { 
      delete a[a2[i]]; 
     } else { 
      a[a2[i]] = true; 
     } 
    } 

    for (var k in a) { 
     diff.push(k); 
    } 

    return diff; 
}; 

这是我试过的,但因为它有阵列数组,所以这不适合我。 任何人都可以请建议帮助。

谢谢。

+0

你期待什么结果?我想知道,你是用'[2]'来识别'2',等等。 – arbuthnott

+0

你是什么意思?找到差异?因为这两个阵列显然非常不同。第二个包含数组数组。您的功能的预期输出是什么?是'[4,6]'吗?还有别的吗? –

+0

我期待差异作为例子['1','2']和['3','1'] o/p是2 – MMR

你可以只扁平化阵列找到差异

function arr_diff(a1, a2) { 
 
    a1 = a1.toString().split(','); 
 
    a2 = a2.toString().split(','); 
 
\t 
 
    if (a1.length < a2.length) {var t = a1; a1 = a2; a2 = t}; 
 
    return a1.filter(x => (!a2.includes(x))).map(Number); 
 
} 
 

 
var x = [1, 2,3, 5]; 
 
var y = [1, [2], [3, [[4]]],[5,6]]; 
 

 
var r = arr_diff(x,y); 
 

 
console.log(r);

你一定要拼合所有你想要使用的功能比较阵列发现here之前。 压扁他们后,您可以使用函数对它们进行比较发现here

let x = [1, 2,3, 5]; 
 
let y = [1, [2], [3, [[4]], [5,6] ]] 
 

 
const flatten = list => list.reduce(
 
    (a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), [] 
 
) 
 

 
const difference = (arr1,arr2) => { 
 
\t arr1 = flatten(arr1) 
 
\t arr2 = flatten(arr2) 
 
\t 
 
\t return arr1.filter(e => arr2.indexOf(e) === -1) 
 
       .concat(arr2.filter(e => arr1.indexOf(e) === -1)) 
 
} 
 

 
console.log(difference(x,y)) // [4,6]