2017-09-26 1 views
0
x = [1, 2,3, 5]; y = [1, [2], [3, [[4]]],[5,6]])); 

Je dois trouver la différence entre ces deux tableaux.Comment trouver diff entre tableau et tableau de tableaux

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

C'est ce que j'ai essayé, mais comme il a un tableau de tableaux, cela ne fonctionne pas pour moi. Quelqu'un peut-il s'il vous plaît suggérer de l'aide.

Merci.

+0

Quel résultat attendez-vous? Je veux savoir, est-ce que vous identifiez '2' avec' [2] ', etc. – arbuthnott

+0

Que voulez-vous dire par" trouver les différences "? Parce que ces deux tableaux ont évidemment très différent. Le second comprend des tableaux de tableaux. Quelle est la sortie attendue de votre fonction? est-ce '[4, 6]'? Autre chose? –

+0

J'attends le diff comme exemple ['1', '2'] et ['3', '1'] o/p est 2 – MMR

Répondre

0

Vous pouvez simplement aplatir les tableaux avant de trouver la différence

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

Vous avez certainement besoin d'aplatir tous les tableaux que vous souhaitez comparer en utilisant une fonction here trouvé. Après les aplatir, vous pouvez les comparer en utilisant une fonction trouvée 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]