array.filter代码说明

时间:2013-12-07 18:26:49

标签: javascript filter

您能否解释下面的代码会做什么?

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

shapes是一个包含对象的数组。

3 个答案:

答案 0 :(得分:1)

正如函数名所暗示的那样,它会过滤掉id等于dragID的形状。此外,它将id = dragID的形状设置为drag

因此,如果你有id [1,2,3,4,5]和dragID 3的形状,该函数将返回id为[1,2,4,5]并将drag设置为形状的形状身份3。

答案 1 :(得分: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有一个polyfill,或页面上有sugarjs,它可能更短(使用findIndex)。

答案 2 :(得分:-1)

查看此代码

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

作为foreach循环。如果函数(当前)返回false循环停止。 例如:

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