3

JS 配列を反復処理する次のコードがあります。特定の要素に到達したら、それを削除したいと思います。スプライスを使用できることはわかっていますが、インデックスの追跡を伴わない方法はありますか:

    myArray.forEach(function (point) {
        canvasContext.clearRect(point.PointX - 3, point.PointY - 3, 6, 6);
        point.PointY++;
        canvasContext.fillRect(point.PointX - 3, point.PointY - 3, 6, 6);

        if (point.PointY > canvas.height) {
            // Remove point

        }
    });        
4

3 に答える 3

1

配列をその場で変更するのは難しい場合があるため、おそらくArray.filter()次の関数を使用することをお勧めします。

myArray = myArray.filter(function (point) {
    canvasContext.clearRect(point.PointX - 3, point.PointY - 3, 6, 6);
    point.PointY++;
    canvasContext.fillRect(point.PointX - 3, point.PointY - 3, 6, 6);

    if (point.PointY > canvas.height) {
        return false;
    }
    return true;
});     

コールバックが返したすべての要素を含む配列を返しますtrue

于 2013-04-19T16:51:36.227 に答える
0

forEachindexおよびに 2 番目のパラメーターを使用しますArray.splice

myArray.forEach(function (point, index) {
    canvasContext.clearRect(point.PointX - 3, point.PointY - 3, 6, 6);
    point.PointY++;
    canvasContext.fillRect(point.PointX - 3, point.PointY - 3, 6, 6);

    if (point.PointY > canvas.height) {
        myArray.splice(index, 1);
    }
});
于 2013-04-19T16:41:58.517 に答える