为什么这个没用通过样例 数组 js练习

在数组的专项练习中为什么我这个通不过
http://www.nowcoder.com/practice/a93dd26ebb8c425d844acc17bcce9411?tpId=6&tqId=10952&rp=1&ru=%2Fta%2Fjs-assessment&qru=%2Fta%2Fjs-assessment%2Fquestion-ranking

function removeWithoutCopy(arr, item) {
    arr.forEach(function(e){
      if(e==item){
          arr.splice(arr.indexOf(item),1);
      }
    });
    return arr;
}
全部评论
使用splice时,最好使用一个新数组保存结果,而且for循环的效率会比forEach高,另外forEach在循环中无法使用break和continue
点赞 回复 分享
发布于 2016-10-22 18:02
function removeWithoutCopy(arr, item) { arr.forEach(function (e) { if (e == item) { arr.splice(arr.indexOf(item), 1); arr.length--; } }); return arr; } 主要原因是,js数组调用splice方法删除数据后会重建数组索引,比如测试用例中的 removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2),在删除前两个2之后,数组 的索引实际减少了2,导致在forEach方法中最后的两个2实际已经越界而无法删除。解决 方法如上,每次删除一个元素后手工把arr的length减1
点赞 回复 分享
发布于 2016-10-22 18:01

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务