猿问

JS 数组去重

题目:移除数组 arr 中的所有值与 item 相等的元素,并将结果返回 。

要求:1:直接在给定的 arr 数组上进行操作。

   2:数组顺序不可打乱。

如:function removeWithoutCopy(arr,item)

  {

    /*

      your code

    */

    return arr;

  }

  console.log(removeWithoutCopy([3,1,4,2],2));//输出[3,1,4]

  来试试吧!

波斯汪
浏览 520回答 9
9回答

慕后森

for (var i=0;i<arr.length;i++){    var items=arr[i];    if(items==item){         arr.splice(i,1);  } }

四季花海

var一个新书组.把不 一样的放进去

慕无忌1623718

第一个条件是不能再创建数组

海绵宝宝撒

都是高手,小弟有点跟不上啊

ABOUTYOU

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 }; 见笑。

繁星coding

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 }; 如果一定在原数组操作,我会从后向前遍历。

12345678_0001

@开学五年级了: 学习了,你的经验很丰富,你的方法更加的通用。

三国纷争

@路人第十一: 只是不知道你数组内的元素是什么所以才那么写。如果是对象,不能通过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是相同的。至于对象怎么比较,就扯远了。如果是基本类型,上述应该没问题。 不过关键点应该在从后向前遍历,不是吗?

长风秋雁

@开学五年级了:  是的,从后向前的确是解决的下标的问题
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答