2017-09-26 2 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

나는 diff를 예 [1, 2,]와 [3, 1]로 기대하고있다. o/p는 2이다. – MMR

답변

0

당신은 배열을 평평하게 할 수있다. 을 평평하게 한 후,이 기능을 사용하여 비교할 수 있습니다 당신이 기대하는 어떤 결과 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]

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);
here있는 차이를 발견하기 전에

관련 문제