2017-09-26 106 views
0
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

回答

0

你可以只扁平化陣列找到差異

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

0

你一定要拼合所有你想要使用的功能比較陣列發現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]