删除数组的“this”索引不起作用

时间:2013-07-07 14:22:19

标签: javascript html arrays time

这是我的代码:

var x = [{letter: "a"}, {letter: "b"}, {letter: "c"}]

x.push({
    timer: setTimeout(function() {x.splice(x.length - 1, 1)}, 3000),
    letter: "j",
})

x.push({letter: "k"})

setTimeout(function() {alert(x)}, 4000)

我的主要问题是:为什么代码会警告“a,b,c,[A number]”何时应警告“a,b,c,k”,为什么会删除错误的索引?

2 个答案:

答案 0 :(得分:1)

x.splice(x.length, 1)x.length开始删除一个元素,该元素超出数组的范围;使用x.splice(x.length - 1, 1)x.pop()

如果想要让对象从数组中删除自己,请在添加之前存储长度并使用它:

var removeIndex = x.length;

x.push({
    timer: setTimeout(function() { x.splice(removeIndex, 1); }, 3000),
    letter: "j",
});

答案 1 :(得分:0)

x.push(setTimeout(function() {x.splice(x.length - 1, 1)}, 3000))

这实际上会将timeoutID推送到数组上。接下来是额外的推送x.push('k'),因此当超时结算时,k元素实际上会被删除。

x.length将在超时功能内部发生变化。如果要使用要添加的元素的索引,请将x.length存储为更高范围内的变量。

http://jsfiddle.net/rrw3s/