在 Polymer 1.x 中从数组中删除项目时出现奇怪的行为

Strange behavior when removing an item from Array in Polymer 1.x

假设有一个名为“_arr”的数组,我从中删除了一个项目。在删除之前,虽然我将它记录到控制台。问题是日志显示数组,就好像该项目已被删除一样。我已经审查了 Polymer Documentation 中的数据系统,但仍然摸不着头脑。

我是否遗漏了有关数据系统工作原理的信息,或者我应该在其他地方寻找原因?

编辑:_arr 是一个字符串数组,我传递的事件如下:

this.fire('rmv-item' , {item: 'item content which is string'});

这是代码

_removeItemFromArr: function(e) {

    const index = this._arr.indexOf(e.detail.item) ; 
    console.log('array before remoivng item:' , this._arr , index); //item doesn't exist

    if (index>-1) {  this.splice('_arr' , index, 1  }

    console.log('array after removing item: ' , this._arr , index); //item doesn't exist
},

问题是事情完全按照你说的做:控制台记录数组,最强调的是记录array "as it was at some specific time in the past",它按实际运行日志时的原样记录数组。并且因为日志记录操作不是同步的,当它实际将交联引用和符​​号-table-链接数据写入浏览器控制台时,您已经从数组中删除了数据,所以您看到的是 console.log 看看它什么时候真正开始。

如果您想真正了解数组的方式 "when you call log",请不要记录数组,记录数组的副本,保证使用类似 slice() 的方式同步生成:

const index = this._arr.indexOf(e.detail.item); 
console.log(`array before removing item at [${index}]: ${this._arr.slice()}`);

而且工作很好。