-1

我有一个对象数组。它有 3 个对象

在控制台打印出来。 从索引 0 开始的三个对象的数组

然后我使用 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 并仅使用“推送”而不是任意增加索引来修复它。

4

2 回答 2

1

然后我在(应该是空的)数组中添加了一个新对象

但似乎没有合并它的新长度。用于push添加项目,这将自动完成。

于 2015-01-29T01:13:07.453 回答
0

JavaScript 没有数组,因为它们在大多数其他语言中实现的方式。

文档状态:

数组是类似列表的对象,其原型具有执行遍历和变异操作的方法。

ar[i]符号仅指可能是数字i的对象的属性。ar

以下在 JavaScript 中是完全合法的:

var ar={};
ar[1] = 1;
ar[3] = 2;

我们仍然称它为array. 但它不必有连续的索引。应该注意的是,这种数组length的属性将是(其索引的最大值)。3

因此,将 JS 数组视为具有数字属性的特殊对象(参见上面文档中的引用)的最合乎逻辑的方式。

于 2015-01-29T00:59:29.930 回答