从循环内的javascript数组中删除元素

时间:2013-04-19 16:40:22

标签: javascript

我有以下代码,它遍历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

        }
    });        

3 个答案:

答案 0 :(得分: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的所有元素。

答案 1 :(得分:0)

循环经常出现问题,这会改变循环播放的数组的长度。他们最终会“跳过”一件物品。

通常情况下,当您要影响数组的长度而不是向上计数时,使用如下循环:

for (var i = Things.length - 1; i >= 0; i--) {
  //your code here
};

答案 2 :(得分:-1)

将第二个参数用于forEachindexArray.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);
    }
});