移除数组中的元素

// 具有收集删除信息列表的代码,算是题解之一
function removeWithoutCopy(arr, item) {

    var array = []

    for (var i = 0;i < arr.length;i++) {
        if (arr[i] === item) {
            array.push(i) //arr要删除的项被收集
        }
    }
    for (var j in array) {
        arr.splice(array[j]-j,1)
    }
    return arr
    // return array
    //在正向遍历时,考虑位置影响
}

非得要正向遍历删除的方法:

function removeWithoutCopy(arr, item) {
    for (var i = 0;i < arr.length;i++) {
        if (arr[i] === item) {
            arr.splice(i,1)
            i-- //删除后使得遍历不会缺少项,同时不用考虑位置变化了
        }
    }
return arr
}

此外还可以使用逆向检索的方法,代码如下:

function removeWithoutCopy(arr,item) {
    for (var i = arr.length-1;i >= 0;i--) {
        if (arr[i] === item) {
            arr.splice(i,1)
            // console.log("删除了第"+i+"项")
        }
    }
return arr
}

此外,在浏览其他coder的代码时,还可以有while循环来解决问题,就不过多赘述了。
测试题目原网址:移除数组中的元素 ,欢迎讨论