您能否解釋下面的代碼會做什麼?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