您能否解释下面的代码会做什么?
shapes = shapes.filter( function (current) {
if(current.id == dragID ) {
drag = current;
return false;
}
return true;
} );
shapes是一个包含对象的数组。
答案 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;
}
}