Object.observe并不总是在Array上为我提供正确的删除索引

时间:2014-11-27 17:01:34

标签: javascript object.observe

我有一个带有观察者功能的列表:

var names = ['joe', 'bob', 'loic'];

Object.observe(names, function(changes){
    changes.forEach(function(change) {        
      console.log(change.type, change.name)
    });
    console.log("names",names);
});   


console.log("######## del bob");
names.splice(1,1);// output is "update 1 - delete 2", why?
console.log("names", names) // but "bob" is the one deleted in the list

根据更改对象删除的索引是2,但是我删除了索引1,并且列表实际上删除了索引1。你知道为什么吗?

是否因为索引1被更新以获取索引2值而索引2被删除? 有没有办法获得实际删除的元素索引?

1 个答案:

答案 0 :(得分:0)

您可以使用Array.observe:

在正确的索引处捕获splice事件
var names = ['joe', 'bob', 'loic'];

Array.observe(names, function(changes){
    changes.forEach(function(change) {        
      console.log(change.type, change.name);
    });
});   

谢谢@ xavier-delamotte:)