首页 新闻 会员 周边

JS 数组去重

0
悬赏园豆:20 [已解决问题] 解决于 2017-03-23 14:59

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

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

   2:数组顺序不可打乱。

如:function removeWithoutCopy(arr,item)

  {

    /*

      your code

    */

    return arr;

  }

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

  来试试吧!

路人第十一的主页 路人第十一 | 菜鸟二级 | 园豆:323
提问于:2017-03-23 14:08
< >
分享
最佳答案
0

for (var i=0;i<arr.length;i++){

   var items=arr[i];

   if(items==item){

        arr.splice(i,1);

 }

}

收获园豆:20
青语 | 小虾三级 |园豆:1000 | 2017-03-23 14:40

在删除以后应该还要加上一个i--,因为删除了下标为i的元素后,这个位置又被新的元素给占了,所以又要重新检测这个位置

红枣味酸奶 | 园豆:218 (菜鸟二级) | 2017-03-23 14:51

 在遍历数组的时候操作数组,很容易出现bug的,还要做一些处理的

路人第十一 | 园豆:323 (菜鸟二级) | 2017-03-23 14:52

@红枣味酸奶: 对的   

路人第十一 | 园豆:323 (菜鸟二级) | 2017-03-23 14:53

@红枣味酸奶: 豆子就给答主了,你的回答也很重要,谢谢。

路人第十一 | 园豆:323 (菜鸟二级) | 2017-03-23 14:58

@路人第十一: 哈哈没关系不客气

红枣味酸奶 | 园豆:218 (菜鸟二级) | 2017-03-23 15:02
其他回答(3)
0

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

吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-23 14:39

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

支持(0) 反对(0) 路人第十一 | 园豆:323 (菜鸟二级) | 2017-03-23 14:50
0

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

宇智波“鼬” | 园豆:202 (菜鸟二级) | 2017-03-23 14:48
0
 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 };

见笑。

开学五年级了 | 园豆:202 (菜鸟二级) | 2017-03-23 15:01
 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 };

如果一定在原数组操作,我会从后向前遍历。

支持(0) 反对(0) 开学五年级了 | 园豆:202 (菜鸟二级) | 2017-03-23 15:08

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

支持(0) 反对(0) 路人第十一 | 园豆:323 (菜鸟二级) | 2017-03-23 15:17

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

不过关键点应该在从后向前遍历,不是吗?

支持(0) 反对(0) 开学五年级了 | 园豆:202 (菜鸟二级) | 2017-03-23 15:36

@开学五年级了:  是的,从后向前的确是解决的下标的问题

支持(0) 反对(0) 路人第十一 | 园豆:323 (菜鸟二级) | 2017-03-23 15:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册