首页 > 试题广场 >

移除数组中的元素

[编程题]移除数组中的元素
  • 热度指数:176883 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组

输入描述:
[1, 2, 3, 4, 2], 2


输出描述:
[1, 3, 4]
示例1

输入

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

输出

[1, 3, 4]
推荐
题目要求不改变原数组,所以我们可以声明一个数组a用于保存arr中不同于item的值,最后将a返回。
function remove(arr, item) {
     //声明一个新数组保存结果
     var a = [];
     //循环遍历
     for(var i=0; i < arr.length; i++){
         //如果arr[i]不等于item,就加入数组a
         if(arr[i] != item){
             a.push(arr[i]);
         }
     }
     return a;
 }

编辑于 2015-11-14 13:59:27 回复(29)
for of方法用于遍历数组很好用的
function remove(arr, item) {
    var newArr= [];
    for (var i of arr){
        if(i === item){
            continue
        }else{
           newArr.push(i)
        }
    }
    return newArr
}

//for of方法用于数组很好用的


编辑于 2021-06-22 02:34:39 回复(0)
function remove(arr, item) {
    return arr.filter(value=>{
        return value !== item
    })
}
发表于 2021-06-16 18:25:23 回复(0)
function remove(arr, item) {
    return arr.filter((it) => {
        return it !== item
    })
}
Es5新增方法 filter
发表于 2021-03-31 20:40:08 回复(0)
reduce
function remove(arr, item) {
  let a = arr.slice(0)
  return a.reduce((acc, cur) => {
  if(cur !== item) {
    acc.push(cur)
  }
    return acc
  }, [])
}
filter
function remove(arr, item) {
  return arr.filter(v => v !== item)
}
编辑于 2021-03-06 11:17:50 回复(0)
function remove(arr, item) {
    let newArr = arr.slice(0, arr.length);
    while (newArr.indexOf(item) != -1) {
        newArr.splice(newArr.indexOf(item),1);
    }
    return newArr;
}

发表于 2021-01-20 13:53:00 回复(0)
  • slice() 方法返回一个新的数组,不会改变原始数组,所以可以使用 slice() 方法来复制一份数组,然后对复制后的数组进行操作。

  • 使用 ES6 语法中的 filter() 方法来移除某个特定元素,代码量少。

发表于 2020-09-09 20:53:48 回复(0)
reduce永远的神
function remove(arr, item) {
   let newArr = arr.reduce((per,cur)=>{
        if (cur !== item){
            per.push(cur)
        }
        return per
    },[])
    return newArr
}



编辑于 2021-04-29 11:46:14 回复(0)
function remove(arr, item) {
    let arr_copy = [...arr];
    for (let i = 0; i < arr_copy.length; i++) {
        item === arr_copy[i] ? (arr_copy.splice(i, 1), i--) : null
    }
    console.log(arr);
    return arr_copy;
}
利用剩余运算符复制,然后和上一题一样的做法。
发表于 2020-07-17 22:39:48 回复(0)

使用filter方法

function remove(arr, item) {
    return arr.filter(function(item1){
        return item1 !== item;
    })
}
发表于 2020-05-26 09:59:43 回复(0)
function remove(arr, item) {
     return arr.filter((value) => value != item)
}


发表于 2020-04-30 21:13:31 回复(0)
function remove(arr, item) {
    var a = arr.indexOf(item);
    var arr_1 = arr;
    while(a != -1){
        arr_1.splice(a,1);
        a = arr.indexOf(item);
    }
    return arr_1;
}
求解为什么只通过了66.7%

发表于 2020-03-24 11:45:36 回复(1)
function remove(arr, item) {
    return arr.filter((a)=>{
        return a !== item
    })
}
利用filter过滤下数组
发表于 2020-03-19 23:17:09 回复(0)
forEach会创建数组副本不会改变原数组
function remove(arr, item) {
    let newArray = [];
    arr.forEach(curI => {
        if (curI !== item) {
            newArray.push(curI);
        }
    })
    return newArray;
}

发表于 2019-12-26 14:32:04 回复(0)
想只用一次循环,所以我选择用JS数组的内置函数indexOf来找到所要找的item的位置,然后利用splice()删除从该位置开始的一个元素即item本身,代码如下:
function remove(arr, item) {
    var tempArr = arr.map(function(el){return el;});
    while(tempArr.indexOf(item)!=-1){
        tempArr.splice(tempArr.indexOf(item),1);
    }
    return tempArr;
}

发表于 2019-12-17 21:10:41 回复(0)
function remove(arr,item) {
    var newArr = arr.concat([])//使用concat返回一个新的数组
    for(var i=0;i<newArr.length;i++){//在新的数组中进行判断删除
        if(newArr[i]===item){
            newArr.splice(i,1)
            i--//防止连续相同数字时,会遗漏判断
        }
    }
    return newArr;
}


发表于 2019-11-21 17:01:50 回复(0)
function remove(arr, item) {
   const newArr =  arr.filter(e => e != item);
    return newArr;
}
发表于 2019-10-14 14:10:11 回复(0)
function remove(arr, item) {
    return arr.filter(function(ele) {
        return ele != item;
    })
}

function remove(arr, item) {
    var a = [];
    arr.forEach(function(ele) {
        if(ele != item) {
            a.push(ele);
        }
    });
    return a;
}

function remove(arr, item) {
    var a = arr.slice();
    for(var i = a.length - 1; i >= 0; i--) {
        if(a[i] === item) {
            a.splice(i, 1);
        }
    }
    return a;
}

编辑于 2019-08-08 21:47:15 回复(0)
function remove(arr, item) {
    var newArr = arr.concat()
    for(var i=0;i<newArr.length; i++){
        if(newArr[i]==item){
            newArr.splice(i,1)
        }
    }
     return newArr 
}


怎么通不过呢?

发表于 2019-04-22 23:16:06 回复(0)
不支持箭头函数,,,,,,
发表于 2019-04-07 11:05:23 回复(0)