我有以下代码,它遍历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
}
});
答案 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)
将第二个参数用于forEach
,index
和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);
}
});