首页 > 试题广场 >

移除数组中的元素

[编程题]移除数组中的元素
  • 热度指数:186731 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果数组返回
示例1

输入

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

输出

[1, 3, 4]
推荐
function removeWithoutCopy(arr, item) {
	for(var i=0; i<arr.length; i++)
	{
		if(item == arr[i])
		{
			arr.splice(i,1);
			i--;
		}
	}
    return arr;
}
splice(index,len,[item])    注释:该方***改变原始数组。
splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值
index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空
如:arr = ['a','b','c','d']

删除 ----  item不设置
arr.splice(1,1)   //['a','c','d']         删除起始下标为1,长度为1的一个值,len设置的1,如果为0,则数组不变
arr.splice(1,2)  //['a','d']          删除起始下标为1,长度为2的一个值,len设置的2

替换 ---- item为替换的值
arr.splice(1,1,'ttt')        //['a','ttt','c','d']         替换起始下标为1,长度为1的一个值为‘ttt’,len设置的1
arr.splice(1,2,'ttt')        //['a','ttt','d']         替换起始下标为1,长度为2的两个值为‘ttt’,len设置的1

添加 ----  len设置为0,item为添加的值
arr.splice(1,0,'ttt')        //['a','ttt','b','c','d']         表示在下标为1处添加一项‘ttt’

看来还是splice最方便啦
编辑于 2015-08-18 21:24:43 回复(47)
function removeWithoutCopy(arr, item) {
    arr = arr.filter(v => v !== item)
    return arr
}
这样为什么不行啊,求大神解答

发表于 2021-07-09 16:50:51 回复(0)
 function removeWithoutCopy(arritem) {
    if (arr.indexOf(item!= -1) {
        arr.splice(arr.indexOf(item), 1);
        return removeWithoutCopy(arritem);
    } else {
        return arr;
    }
}
发表于 2021-04-29 16:23:33 回复(0)
function removeWithoutCopy(arr, item) {
    for(i=0;i<arr.length;i++){
        if(arr[i]==item){
            for(j=i;j<arr.length;j++){
                arr[j]=arr[j+1]
            }
            i = i-1
            arr.length-=1
        }
    }
    return arr
}
纯....(表达不出来的一下子的上脑的简单想法)
发表于 2021-04-06 14:58:25 回复(0)
function removeWithoutCopy(arr, item) {
    let length = arr.length
    while (length--) {
        if (arr[length] === item) {
            arr.splice(length, 1)
        }
    }
    return arr
}
编辑于 2021-04-02 11:06:06 回复(0)
function removeWithoutCopy(arr, item) {
    while(arr.findIndex(it=>item === it)!=-1){
       arr.splice(arr.findIndex(it => item === it),1)
    }
    return arr
}
while循环,与上上题目结合,并与上题题目区分,如果存在,则一直循环,直到删除掉所有的item
发表于 2021-03-31 20:54:07 回复(0)
function removeWithoutCopy(arr, item) {
    return  arr.filter(function(i){i!=item});
}

打印 arr.filter(function(i){i!=item}); 返回的是正确的但是return就错了
发表于 2021-03-25 11:15:17 回复(0)
// 递归思想
function removeWithoutCopy(arr, item) {
    if (arr.indexOf(item) === -1) return arr;
    arr.splice(arr.indexOf(item), 1);
    removeWithoutCopy(arr, item);
    return arr
}    

编辑于 2021-03-18 17:21:58 回复(0)
function removeWithoutCopy(arr, item) {
    return arr.filter(value=>{
        return value != item
    })
}
为什么不行?
发表于 2021-03-17 11:09:26 回复(1)
循环删除
function removeWithoutCopy(arr, item) {
    while(arr.indexOf(item) !=-1){
        var index = arr.indexOf(item)
        arr.splice(index,1)
    }
    return arr
}

发表于 2021-03-01 21:37:46 回复(0)
function removeWithoutCopy(arr, item) {
    var l=arr.length;
    for(var i=0;i<l;){
        if(arr[i]==item){
            arr.splice(i,1);
            l--;
            i=i;
        }
        else{
            i++;
        }
    }
    return arr;
}
发表于 2021-03-01 20:51:40 回复(0)
function removeWithoutCopy(arr, item) {
        while (arr.indexOf(item) != -1) {
            arr.splice(arr.indexOf(item),1);
        }
        return arr;
}

发表于 2021-01-20 14:04:06 回复(0)
function removeWithoutCopy(arr, item) {
      var numbs = arr.filter((a)=>{
        return a!=item;
      })
      return numbs ;
    }
为什么这样写就不能通过呢?感觉是能达到这个要求的啊,各位大佬能帮忙看看是什么问题吗?
发表于 2020-11-19 10:36:35 回复(0)

非 splice 方法

function removeWithoutCopy(arr, item) {
    let j = 0
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] !== item) arr[j++] = arr[i]
    }
    arr.length = j
    return arr
}
编辑于 2020-11-18 00:13:54 回复(0)
简单的没话说~
function removeWithoutCopy(arr, item) {
    arr.forEach((item, index) => {
        item === item && arr.splice(index, 1);
    });
    
    return arr;
}
发表于 2020-10-07 00:39:18 回复(0)
function removeWithoutCopy(arr, item) {
    const index = arr.indexOf(item);
    if ( index != -1 ) {
        arr.splice(index,1);
        removeWithoutCopy(arr, item)
    }
    return arr;
}
想了想,还是用递归,
发表于 2020-09-23 17:07:27 回复(0)
function removeWithoutCopy(arr, item) {
    return arr.filter(ar=>ar!==item)
}
只通过了一般。。。。。
各位大佬给看看
发表于 2020-08-19 20:11:17 回复(0)
function removeWithoutCopy(arr, item) {
    return arr.filter(element => element !== item)
}
这样为什么不通过呀
发表于 2020-08-13 19:48:44 回复(0)
function removeWithoutCopy(arr, item) {
    var j = 0
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] != item) {
            arr[j] = arr[i]
            j++
        }
    }
    arr.splice(j)
    return arr
   
}
发表于 2020-08-08 12:19:04 回复(0)

function removeWithoutCopy(arr, item) {
    while(arr.indexOf(item)!=-1){
        var  i = arr.indexOf(item);
        arr.splice(i,1);
    }
    return arr;
}

发表于 2020-08-02 21:19:33 回复(0)