题目:移除数组 arr 中的所有值与 item 相等的元素,并将结果返回 。
要求:1:直接在给定的 arr 数组上进行操作。
2:数组顺序不可打乱。
如:function removeWithoutCopy(arr,item)
{
/*
your code
*/
return arr;
}
console.log(removeWithoutCopy([3,1,4,2],2));//输出[3,1,4]
来试试吧!
for (var i=0;i<arr.length;i++){
var items=arr[i];
if(items==item){
arr.splice(i,1);
}
}
在删除以后应该还要加上一个i--,因为删除了下标为i的元素后,这个位置又被新的元素给占了,所以又要重新检测这个位置
在遍历数组的时候操作数组,很容易出现bug的,还要做一些处理的
@红枣味酸奶: 对的
@红枣味酸奶: 豆子就给答主了,你的回答也很重要,谢谢。
@路人第十一: 哈哈没关系不客气
var一个新书组.把不 一样的放进去
第一个条件是不能再创建数组
都是高手,小弟有点跟不上啊
1 function removeWithoutCopy(arr,item) 2 { 3 arr_ = [] 4 arr.forEach(function(it){ 5 if(!function(a,b){ 6 return JSON.stringify(a) == JSON.stringify(b); 7 }(item,it)){ 8 arr_.push(it); 9 } 10 }); 11 return arr_; 12 };
见笑。
1 function removeWithoutCopy(arr,item) 2 { 3 var len = arr.length; 4 var eq = function(a,b){ 5 return JSON.stringify(a) == JSON.stringify(b); 6 }; 7 for(var i =len-1;i>=0;i--){ 8 if(eq(arr[i],item)){ 9 arr.splice(i,1); 10 } 11 } 12 return arr; 13 };
如果一定在原数组操作,我会从后向前遍历。
@开学五年级了: 学习了,你的经验很丰富,你的方法更加的通用。
@路人第十一: 只是不知道你数组内的元素是什么所以才那么写。如果是对象,不能通过JSON.stringify来比的。因为
var eq = function(a,b){ return JSON.stringify(a) == JSON.stringify(b); }; var a = { x:1, y:2 }; var b = { y:2, x:1 }; console.log(eq(a,b));//false
但实际上述对象a,b是相同的。至于对象怎么比较,就扯远了。如果是基本类型,上述应该没问题。
不过关键点应该在从后向前遍历,不是吗?
@开学五年级了: 是的,从后向前的确是解决的下标的问题