如何从数组中删除元素
How can I remove elements from an array?
我正在开发一个类似多页绘画的应用程序,有一个"清除"按钮。当用户按下该按钮时,我希望该页面上绘制的所有形状都被清除。以下是清除按钮后面的代码。
clear.addEventListener('click', function (e) {
canvas.width = canvas.width;
tempCanvas.width = tempCanvas.width;
var tempShapes = shapes.slice();
alert(tempShapes.length);
for(var i=0; i<tempShapes.length; i++)
{
var A = tempShapes[i];
if(A.pageNum == pNum)
{
alert('in');
shapes.splice(i, 1);
}
}
//shapes.length = 0;
e.preventDefault();
}
shapes[]
是包含所有页面的完整对象的数组。我只想删除当前页码(pNum
)的那些。当代码运行时,它会在该特定页面的形状数组中留下一个元素,有时还会留下两个元素。我希望删除该特定页面的形状数组的所有元素。
您可能会发现Array.filter
对该任务更有用,比如:
shapes = shapes.filter(function(shape, i) {
return tempShapes[i].pageNum != pnum;
})
问题是删除第一个元素后,数组索引不同步
orig : 0-0, 1-1, 2-2
temp : 0-0, 1-1, 2-2
remove orig[0] -> index 0 -> temp[0] = 0
orig : 0-0, 1-1, 2-2
temp : 0-1, 1-2
remove orig[1] -> index 1 -> temp[1] = 2 !!
您可以从正在迭代的同一数组中删除:
clear.addEventListener('click', function (e) {
for(var i=shapes.length-1; i>=0; i--) {
if(shapes[i].pageNum == pNum) {
shapes.splice(i, 1);
}
}
e.preventDefault();
}
或者你可以过滤它们:
clear.addEventListener('click', function (e) {
shapes = shapes.filter(function(item) { return item.pageNum != pNum });
e.preventDefault();
}
相关文章:
- 从组件状态的数组中删除元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 正则表达式条件来删除元素
- 使用javascript删除元素时出现的问题
- 当会话存储阵列中存在大量元素时,如何从中删除元素
- 从角度数组中删除元素
- AngularJs localStorage在循环中删除元素
- 在使用jquery插入之前删除元素
- 如何删除元素列表中的类并添加到另一个元素 Jquery.
- 更新分组条形图(转换或删除元素组)
- 向下滚动后如何用同一类逐个删除元素
- 如何防止 jQuery 事件在删除元素时冒泡
- 从jQuery对象中删除元素
- 如何删除元素的结束标记,添加一些文本,然后重新添加标记
- 从画布中删除元素
- 如何解析html以删除元素并只返回其位置的标题
- 使用 V8 从密集数组中删除元素的最佳方法是什么
- 如何使用jquery删除元素
- 根据成员属性从数组中删除元素
- 从中删除元素'的父元素,并将其附加到其他元素