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

时间:2017-08-09 01:32:22

标签: javascript polymer polymer-1.0 polymer-2.x polymer-starter-kit

假设有一个名为'_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
},

1 个答案:

答案 0 :(得分:0)

问题在于事情正如你所说:控制台记录数组,最强调记录数组"因为它是在过去的某个特定时间",它会在日志实际运行时记录数组。并且由于日志记录操作不是同步的,当它实际将交联的引用和符号表链接数据写入浏览器控制台时,您已经从数组中删除了数据,因此您看到的是console.log在何时看到的内容它实际上已经开始了。

如果你想要一个关于数组方式的真实快照"当你调用log"时,不要记录数组,记录数组的副本,保证使用某些内容同步生成比如slice()

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

工作很好。