题目描述
移除数组 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;
}