2013-12-07 3 views
-4

다음 코드에서 무엇을 할 수 있는지 친절하게 설명 할 수 있습니까?array.filter 코드 설명

shapes = shapes.filter(function (current) { 
    if(current.id == dragID) { 
     drag = current; 
     return false; 
    }    
    return true; 
}); 

도형은 객체를 보유하는 배열입니다.

답변

1

, 그것은 모양을 필터링합니다. 또한 id = dragID가 drag 인 모양으로 설정되었습니다.

ID가 [1,2,3,4,5]이고 드래그 ID가 3 인 모양 인 경우 함수는 ID가 [1,2,4,5] 인 모양을 반환하고 drag을 ID 3으로 모양을 설정합니다

-1

보기 foreach 루프로이 코드

shapes.filter(function(current) { 
... 
}) 

. 함수 (현재)가 false 루프 스톱을 반환하면. 예를 들어 : ID가 dragID에 동일 함수 이름에서 알 수 있듯이

for(i=0;i<shapes.length;i++) { 
if(shapes[i].id == dragID) { 
    drag = shapes[i].id; 
    break; 
} 
} 
+0

왜'필터'는'거짓'에서 멈출까요? – Bergi

0

.splice()의 비효율적 인 구현입니다.

[0, 1, 2, 3, 4]

"2"에있는 항목이 dragID 일치하는 하나 있다면,이 코드를 실행 한 후, 당신은으로 끝날 것 : 상상 모양이처럼 보였다 :

drag = 2 
shapes = [0, 1, 3, 4] 

이 코드의 출처는 어디입니까? 저자는 아마 더 나은로 기록 될 것이라고 통보해야합니다 Array.findIndex 장소에서 polyfill이 있다면

var drag; 
for(var i = shapes.length - 1; i >= 0 && shapes[i].id != dragID; i--) 
{} 

if (i >= 0) 
    drag = shapes.splice(i, 1); 

, 또는 sugarjs은 (findIndex를 사용하여), 심지어 짧아 질 수있는 페이지입니다.