array.filter代码说明

array.filter code explanation

本文关键字:说明 代码 filter array      更新时间:2024-04-15

你能解释一下下面的代码会做什么吗?

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

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

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

因此,如果您有id为[1,2,4,5]和dragID为3的形状,则函数将返回id为[1,2,4,5]的形状,并将drag设置为id为3的造型。

这是.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)。

查看此代码

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

作为CCD_ 3循环。如果功能(电流)返回false循环停止。例如:

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