무엇이 가장 효율적인 방법의 필터링 배열에 따라 다른 내용의 배열?

StackOverflow https://stackoverflow.com/questions/800121

  •  03-07-2019
  •  | 
  •  

문제

말 나는 두 가지 배열,항목 및 removeItems 고 내가 원하는 값에서 발견 removeItems 에서 제거되는 항목입니다.

무력 메커니즘을 수:

var animals = ["cow","dog","frog","cat","whale","salmon","zebra","tuna"];
var nonMammals = ["salmon","frog","tuna","spider"];
var mammals = [];
var isMammal;

for(var i=0;i<animals.length;i++){
   isMammal = true;
   for(var j=0;j<nonMammals;j++){
     if(nonMammals[j] === animals[i]){
       isMammal = false;
       break;
     }
   }
   if(isMammal){
     mammals.push(animals[i]);
   }
}

이것은 무엇입니까?O(N^2)?거기에 더 많은 효율적인 방법은?

도움이 되었습니까?

해결책

실제로 O(M * N).

아마 당신이 할 수 있는 더 나은 정렬 animals 먼저 배열을 하는 이진 검색합니다.할 수 있을 줄일 O(N * log N) -아는 경우 log N < M 어쨌든.

어쨌든,당신과 함께 작업 JS 고 실행되는 클라이언트 측면,다음을 시도를 유지하는 데이터의 양에 또는 그들의 브라우저는 소리에서 당신은 모든 요청을 합니다.

다른 팁

기본적으로 당신이하고 싶은 것은 세트 차이 S t를 효율적으로 계산하는 것입니다. 내가 아는 가장 빠른 방법은 t를 해시 맵 (| t | 단계)에 넣고 각 s를 s로 이동하는 것입니다 (제작 | s | 단계) t에서 s를 점검합니다 (O (1)). 따라서 O (| t | + | s |) 단계에 도달합니다.

jQuery를 사용하면 매우 쉽습니다.

function is_mammal(animal)
{
    return $.inArray(animal, nonMammals) == -1;
}

mammals = $.grep(animals, is_mammal);

문서를 참조하십시오 $.grep 그리고 $.inArray.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top