2013-12-07 134 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)。