搜索

首页  >  问答  >  正文

javascript - 一个是数组,一个是对象,怎么进行比较去重?

var arr=[{'id':1,'name':1},{'id':2,name:2},{'id':3,'name':3}];
var obj = {'id':2,'name':2};

请问这个arr 和obj怎么进行对比,发现重复id2后,去掉arr这个数组对象id:2,并生成一个新的数组?

仅有的幸福仅有的幸福2810 天前907

全部回复(4)我来回复

  • 给我你的怀抱

    给我你的怀抱2017-07-05 10:55:25

    用数组的filter过滤一下就生成新的数组了。
    另外,题目里的 数组第二个 'id:2'语法错误,引号位置不对

    var res = arr.filter(function(e){
        return e.id!=obj.id
    })

    下面是我的脑洞:万一题主要的是键值对都重复才过滤呢……(有可能想多了)

    考虑到可能你还想保证数组里面元素的键值对跟obj的键值对必须完全一样的话:可以考虑这样

    var arr=[{'id':1,'name':1},{id:2,name:3},{'id':3,'name':3}];
    var arr2=[{'id':1,'name':1},{id:2,name:2},{'id':3,'name':3}];
    var obj = {'id':2,'name':2};
    var res = arr.filter(function(e){//
      var result = true; //作为过滤标识
      for(var key in obj){//遍历obj的键值
          if(e[key]!=obj[key]){//如果出现键值相同当值不同,就不算重复
               result = true;
              break;
          }
          //如果上面条件不通过,那就表示键值重复
          result = false;
       }//遍历到最后,如果键值都重复,那result肯定是false,否则必然出现result=true的情况
       return result;
    });
    var res2 = arr.filter(function(e){
      var result = true; 
      for(var key in obj){
          if(e[key]!=obj[key]){
               result = true;
              break;
          }
          result = false;
       }
       return result;
    });

    回复
    0
  • PHP中文网

    PHP中文网2017-07-05 10:55:25

    雷雷

    回复
    0
  • 迷茫

    迷茫2017-07-05 10:55:25

    雷雷

    回复
    0
  • 为情所困

    为情所困2017-07-05 10:55:25

    Array.prototype.filter()

    雷雷

    回复
    0
  • 取消回复