JavaScript删除数组的索引不起作用

时间:2018-06-01 10:54:35

标签: javascript

我有这个数组:

var sizes = [
        [20, 10, 0],
        [40, 20, 0],
        [60, 30, 0],
        [80, 40, 0],
        [100, 50, 0]
        ];

我想随机将矩形的大小更改为大小:(20,10)或(40,20)或(60,30)或(80,40)或(100,50)并且我更改了X位置(这似乎不是我的问题的一部分)

每个尺寸最多只能显示10次。我在数组的第3列保存了大小的计数器。当它计数10时我想删除这个可能尺寸的大小,所以它不能再次改变为这个尺寸。此外,这应该将更改限制为最多50次。

随机更改矩形的我的代码如下所示:

function changeRec() {

        if (sizes.length == 0) {
            return;
        }

        var rnd = Math.round(Math.random() * (sizes.length -1 ));

        var x = sizes[rnd][0];
        var y = sizes[rnd][1];

        var element = document.getElementById("rectangle");

        element.style.width = x + "px";
        element.style.height = y + "px";

        var newX = (Math.random() * (document.body.clientWidth -200));
        var rect = element.getBoundingClientRect();
        if (Math.abs(newX - rect.left) < 30) {
            changeRec();
        } else {
            element.style.left = newX+"px";
            sizes[rnd][2]++;

            if (sizes[rnd][2] == 10) {
                delete sizes[rnd];
                console.log("deleted");
            }

            count++;
            calculate();
        }           
    }

然而,此代码似乎无法正常工作。我不知道为什么,但似乎从sizes数组的索引中删除不起作用。

我收到错误:TypeError: undefined is not an object (evaluating 'sizes[rnd][0]')

1 个答案:

答案 0 :(得分:3)

delete sizes[rnd]不会将数组缩小一个,而是会给你一个空元素。因此,当您第二次点击该索引时,它会抛出一个错误。

要从数组中删除项目,您应使用splice

更改

delete sizes[rnd]

sizes.splice(rnd, 1)