Javascript Object.observe并不总是为数组提供正确的已删除索引
我有一个列表,上面有一个观察者函数:Javascript Object.observe并不总是为数组提供正确的已删除索引,javascript,object.observe,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("
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
根据change对象删除的索引是2,但我删除了索引1,而列表实际上删除了索引1。你知道为什么吗
是因为索引1被更新以获得索引2的值,而索引2被删除了吗?
有没有办法获取实际删除的元素索引?您可以使用数组在正确的索引处捕获拼接事件。注意:
var names = ['joe', 'bob', 'loic'];
Array.observe(names, function(changes){
changes.forEach(function(change) {
console.log(change.type, change.name);
});
});
谢谢@xavier delamotte:)删除元素并不意味着以下所有元素都下移。如果你确实删除了名字[1]你只会得到一条
delete
消息,而数组将包含['joe',undefined'loic']
是的,这是因为。它将首先覆盖(更新)数组的元素,然后将其删除。谢谢,使用“删除”可以工作!:)(JS neewbie inside)也许你可以用Array.observe来代替?嗯,delete
在数组中留下了一个洞,这通常是不需要的。