2013-12-07 179 views
-4

您能否解釋下面的代碼會做什麼?array.filter代碼解釋

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

shapes是一個存放對象的數組。

回答

1

由於功能顧名思義,它過濾掉形狀與ID等於dragID。另外,它將id = dragID的形狀設置爲drag

所以,如果你有形狀與id [1,2,3,4,5]和dragID 3,該函數將返回形狀與id [1,2,4,5]和設置drag形狀與id 3

-1

查看該代碼

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

foreach循環。如果功能(當前)返回false循環停止。 例如:

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

爲什麼'filter'停在'false'上? – Bergi

0

這是.splice()的低效執行。想象的形狀是這樣的:

[0,1,2,3,4]

運行該代碼,若爲 「2」 的項目是,匹配dragID所述一個之後,你最終用:

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

此代碼從哪裏來?筆者或許應該被告知這將是更好的寫法如下:

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

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

如果有對Array.findIndex代替填充工具,或sugarjs是在頁面上,它可能是更短(通過使用findIndex)。