题目描述

移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,

并将结果返回

示例1

输入

[1, 2, 2, 3, 4, 2, 2], 2

输出

[1, 3, 4]

代码实现:

function removeWithoutCopy(arr, item) {
    for (var i=0,len=arr.length;i<len;i++) {
        if(i==len-1 && arr[i]!=item)
            return arr
        else if(arr[i] == item) {
           arr.splice(i,1)
           arguments.callee(arr,item)
        }
    }
    return arr
}

把数组看成是队列,等于item元素直接删除,不等于的,先push再删除。

function removeWithoutCopy(arr, item) {
    var n=arr.length;
     for(var i=0;i<n;i++){
         if(arr[0]!==item)    
             arr.push(arr[0]);
         arr.shift();

    }
    return arr;
}
// 倒着检测;不用考虑;位置影响吧

function removeWithoutCopy(arr, item) { 
      for(i=arr.length-1;i>=0;i--) 
        { 
         if(arr[i]==item) 
           { 
                      arr.splice(i,1); 
            } 
         } 
      return arr; 
  }
// 题目要求在原数组上面直接修改,删除数组元素,可以用splice方法,给其传递两个参数,第一个参数表示起始位置,
// 第二个参数表示删除元素的个数。因此,循环遍历数组arr,如果arr[i] == item,就将i作为第一个参数,1作为第
// 二个参数(只删除一个元素)传给splice方法。需要注意的是,splice方法会改变数组的长度,因此在每次删除之后,
// 都需要执行i--以确保数组长度正确。
function removeWithoutCopy(arr, item) {
     for(var i = 0; i < arr.length; i++){
         if(arr[i] == item){
             //splice方法会改变数组长度,当减掉一个元素后,后面的元素都会前移,因此需要相应减少i的值
             arr.splice(i,1);
             i--;
         }
     }
     return arr;
 }

results matching ""

    No results matching ""