您能否解释下面的代码会做什么?array.filter代码解释
shapes = shapes.filter(function (current) {
if(current.id == dragID) {
drag = current;
return false;
}
return true;
});
shapes是一个存放对象的数组。
您能否解释下面的代码会做什么?array.filter代码解释
shapes = shapes.filter(function (current) {
if(current.id == dragID) {
drag = current;
return false;
}
return true;
});
shapes是一个存放对象的数组。
由于功能顾名思义,它过滤掉形状与ID等于dragID。另外,它将id = dragID的形状设置为drag
。
所以,如果你有形状与id [1,2,3,4,5]和dragID 3,该函数将返回形状与id [1,2,4,5]和设置drag
形状与id 3
查看该代码
shapes.filter(function(current) {
...
})
为foreach
循环。如果功能(当前)返回false
循环停止。 例如:
for(i=0;i<shapes.length;i++) {
if(shapes[i].id == dragID) {
drag = shapes[i].id;
break;
}
}
这是.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)。
为什么'filter'停在'false'上? – Bergi