function removeWithoutCopy(arr, item) { for(var i = 0; i < arr.length; i++) { if(arr[i] === item) { arr.splice(i--, 1); } } return arr; }直接进行一次循环,如果某次循环的值等于指定的项,就使用splice()方法删除该项,删除后,数组长度减一,但应该重新判断被删除后的数组中当前索引的值,因而要i--,以抵消每次for循环结束后执行的i++。否则就会跳过这一项,从而导致结果不正确。
function removeWithoutCopy(arr, item) { while(arr.indexOf(item)!=-1) { arr.splice(arr.indexOf(item),1); } return arr; }
用递归的方式处理 function removeWithoutCopy(arr, item) { let i = arr.indexOf(item) if(i > -1){ arr.splice(i,1) return removeWithoutCopy(arr,item) } else { return arr } }
let num = 0 function removeWithoutCopy(arr, item) { if(num > arr.length){return arr} arr[num] === item ? arr.splice(arr.indexOf(item), 1) : num += 1 return removeWithoutCopy(arr,item) }递归的思路,最快1288ms
}
function removeWithoutCopy(arr, item) {var num = 0;for(var i = 0; i< arr.length; i++){if(arr[i] !== item && num != i){arr[++num] = arr[i];}}arr.length = ++num;}