2013-01-25 3 views
4

내가이 문제 해결 글을 많이 발견했습니다자바 스크립트 - 두 개의 배열을 비교하여 차이를 반환하지만

우리 가정이 있습니다

array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E']; 

이 검증 된 빠른 솔루션에 있는가 두 배열을 서로 비교하여 두 배열에 나타나는 값없이 한 배열을 반환합니다 (여기서 C와 E). 원하는 솔루션 :

array3 = ['A', 'B', 'D'] 

그러나 당신이 경우 어떻게 :

array1 = ['A', 'B', 'C', 'D', 'D', 'E']; array2 = ['D', 'E']; 

을하고 솔루션을 찾고가 될 :

: 여기

array3 = ['A', 'B', 'C', 'D'] // don't wipe out both D's 

어떤 상황입니다 당신은 문장이 어떻게 작동하는지 학생들에게 가르치려고합니다. - 고양이 - 마우스 - 더 -

먹은 그들은 답변을 입력 시작

: 당신은 그들에게 스크램블 문장 줄 이제 읽기 위해 프롬프트를 싶은 고양이

을 :

ate - mouse - the

현재 내 코드는 두 코드를 모두 사용합니다.
그냥 이상

for (i=0; i < answer_split.length; i++) { 
for (j=0; j < xsentence.length; j++) { 
     (function(){ 
      if (answer_split[i] == xsentence[j]) { zsentence.splice(j,1); return; } 
     })(); 
    } 
} 
+2

익명 함수 및 return 문은 무엇입니까? 내가 말할 수있는 한, 이것들은 어느 것도하지 않습니다. –

+0

@JohnKugelman 익명 함수는 자체 호출 함수이므로 _something._'return', OTOH는 쓸모가 없습니다. –

+0

@MattBall 왜 익명 함수로'if' 문을 감싸는 지요. 아무것도 추가하지 않습니다. –

답변

12

반복 (zsentence가) (이하, 가입 코드에 의해 조작 ED 화면에 넣어 얻을 것이다 xsentence의 복사) : 여기

내가 무엇을 시도했다입니다 제거 할 요소의 배열입니다.

var array1 = ['A', 'B', 'C', 'D', 'D', 'E']; 
var array2 = ['D', 'E']; 
var index; 

for (var i=0; i<array2.length; i++) { 
    index = array1.indexOf(array2[i]); 
    if (index > -1) { 
     array1.splice(index, 1); 
    } 
} 

그것은 O(array1.length * array2.length)입니다하지만 합리적으로 작은 배열과 최신 하드웨어에 원격으로 문제를 야기해서는 안된다.

http://jsfiddle.net/mattball/puz7q/

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice

+1

좋습니다. 샘플 배열이 정렬됩니다. 이 경우 바이너리 검색을 사용하여 속도를 높일 수 있습니다. http://en.wikipedia.org/wiki/Binary_search#Deferred_detection_of_equality "키가 고유하지 않으면 가장 작은 인덱스" – brianchirls

+0

Thanks Matt을 반환합니다. 그 .indexOf 섹션은 제가 찾고있는 섹션입니다. –

+0

이 솔루션에서는 array2가 길거나 'F'와 'G'가 포함 된 경우를 확인할 수 없습니다. – badunk

0

또한 필터를 사용할 수 있습니다. 아래의 예를 검토하십시오.

var item = [2,3,4,5]; 
var oldItems = [2,3,6,8,9]; 
oldItems = oldItems.filter(function(n){ return item.indexOf(n)>-1?false:n;}); 

은 그래서 이것은 [6,8,9]

반환하고 만 일치하는 항목을 얻으려면 당신은 코드 아래에 작성해야합니다.

oldItems = oldItems.filter(function(n){ return item.indexOf(n)>-1?n:false;}); 

[2,3] 만 반환됩니다.

관련 문제