首页新闻找找看学习计划

js数组splice之后再push相同的元素会出现元素重复

0
悬赏园豆:10 [已解决问题] 解决于 2018-08-22 16:27
addObject:function (object) {
this.selectedObjectsId.push(object.key);//存储高亮构件ID
},
removeObject:function (object) {
for(var j=0;j<this.selectedObjectsId.length;j++){
if(this.selectedObjectsId[j]===object.key){
this.selectedObjectsId.splice(j,1);
}
}
},

我先执行
addObject,比如说得到 [1]
我再执行removeObject,删除1这个元素,此时数组长度确实为0了
当我再执行addObject,元素仍为1,得到的便是[1,1]

如果:

我先执行addObject,比如说得到 [1,2]
我再执行removeObject,删除1,2这个元素,此时数组长度确实为0了
当我再执行addObject,元素为1,得到的便是[1,1]
我心悦你的主页 我心悦你 | 初学一级 | 园豆:73
提问于:2018-08-22 11:19
< >
分享
最佳答案
0

splice的时候,原数组会改变;此时会影响到原数组的length;而此时你的循环变量i的值还再加;

i==0时;假设原数组【1,2,3】,第一次你截取了1;i++

i==1了 ;数组变成了【2,3】,而这时候的a【i】==3了;相当于2已经被忽略了;

所以你这个方法逻辑是有问题的。

收获园豆:4
心悠魂然 | 老鸟四级 |园豆:2080 | 2018-08-22 15:30
其他回答(2)
0

你用的是什么框架啊

收获园豆:2
博学多思 | 园豆:89 (初学一级) | 2018-08-22 12:57
0

"我再执行removeObject,删除1,2这个元素,此时数组长度确实为0了"

只執行一次removeObject怎麼能夠把[1,2]長度變成0呢?

你的removeObject方法一次只會移除一個元素喔

收获园豆:4
RosonJ | 园豆:2315 (老鸟四级) | 2018-08-22 14:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册