来自牛客网的js编程题
1、移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
1 function remove(arr, item) { 2 if(!Array.isArray(arr)) return -1; 3 for(var i=0;i<arr.length;i++){ 4 if(arr[i]==item){ 5 arr.splice(i,1); 6 i--; //这里是因为用splice删除一个元素之后,下一个元素替换当前元素的位置 7 } 8 } 9 return arr; 10 }
上面代码测试通过率66.67%,主要原因是改变了原始的数组。
修改成如下,亲测通过率100%
function remove(arr, item) { if(!Array.isArray(arr)) return -1; var a=new Array(); for(var i=0;i<arr.length;i++){ if(arr[i]!=item){ a.push(arr[i]); } } return a; }
这里相当于两种思路来解决问题, 一种是正推,另一种是反推, 类似数学中计算概率问题的思路。