我有一个对象数组。它有 3 个对象
然后我使用 arr.splice(0,1) 将它们一一删除,我重复了 3 次。然后我向(应该是一个空数组)添加了一个新对象并在控制台中打印出整个数组。
如您所见,它是数组中唯一的对象,但不是从索引 0 开始,而是从索引 3 开始。此外,0、1、2 的索引不存在,它们不是“null”或任何东西喜欢它。他们走了。这是怎么回事?
这是删除的实际代码。我调用它 3 次。
this.removeSelected = function () {
//Remove from array
//I have verified that selFramePos=0 many times.
f.splice(selFramePos, 1);
}
我保留在每个数组槽中的这个对象(只是一堆数据,没什么特别的):
Data = {
normal : normData,
imageUrl: selfDefaults.viewport.src,
topLeftX: norm(cf.paper.width, vpo.cx, vpw),
topLeftY: norm(cf.paper.width, vpo.cy, vpw),
width: norm(cf.paper.width, vpo.width, vpw),
height: norm(cf.paper.width, vpo.height, vpw),
rotation: selfRotator.getRotation().rotation,
cropping:
{
shape: selfSelector.getSelection().shape,
tlx: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().left, vpw),
tly: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().top, vpw),
w: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().width, vpw),
h: mathUtils.normalize(cf.paper.width, selfSelector.getSelection().height, vpw),
color: selfSelector.getSelection().color,
opacity: selfSelector.getSelection().opacity
},
filters: null,
transition:
{
type: 'dissolve',
time: 500
},
requireUserInput: true
}
我的问题是我不断创建新的数组槽,索引号增加,如下所示:
var i=0
function add2Array () {
arr[i]='something'
i++
}
因此,每次我调用该函数时,它都会创建一个排序的“唯一 ID”,而不是使用索引和位置。
我通过删除 i 并仅使用“推送”而不是任意增加索引来修复它。