2016-06-17 3 views
-2

다음은 첫 번째 인수에서 제거하는 프로그램으로, 연속 된 인수와 동일한 요소 인 항상 배열입니다. 다음 코드를 실행하면 첫 번째 인수와 동일한 값만 입력 배열 (첫 번째 인수)에서 제거되지만 나머지는 손상되지 않습니다. 내가 루프의 내부에 다음 코드를 사용할 때배열의 .filter 함수에서 for 루프는 어떻게 끝나나요?

function destroyer(arr) { 
    // Remove all the values 
    var i; 
    var arr = Array.prototype.slice.call(arguments); 
    var arr_req = arr[0]; 
    arr_req = arr_req.filter(function(val) { 
     for(i = 1; i < arr.length; i++) { 
      if(val === arr[i]) { 
       return false; 
      } else { 
       return true; 
      } 
     } 
    }); 
    return arr_req; 
} 

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); 

는하지만, 나는 왜이 첫 번째 경우에서 얻은 정확한 결과 아닌 올바른 예상 출력, 즉 그래서 [1,1]

arr_req = arr_req.filter(function(val) { 
    for(i = 1; i < arr.length; i++) { 
     if(val === arr[i]) { 
      return false; 
     } 
    } 
    return true; 
}); 

입니다 얻을 ? 후자와 같지 않습니까? 나는 JavaScript가 처음이다. 아무도 설명 할 수 있을까요?

+5

첫 번째 경우 'for' 루프는 한 번만 실행됩니다. 거기에있는'return' 문은 루프를 파괴합니다. – Cerbrus

답변

-1
function destroyer(arr) { 
    var i; 
    var arr=Array.prototype.slice.call(arguments); 
    var arr_req=arr[0]; 
    arr_req=arr_req.filter(function(val){ 
       var flag; 
    for(i=1;i<arr.length;i++) 
    { 

     if(val===arr[i]) 
     {   
       flag=false;   
     return false; 
     }else{ 
       flag=true;    
     } 

    } 
    return flag; 
}); 

return arr_req; }

console.log (구축함 ([1, 2, 3, 1, 2, 3], 2,3)));

관련 문제