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

查看:88
本文介绍了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,并生成一个新的数组?

解决方案

用数组的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;
});

这篇关于javascript - 一个是数组,一个是对象,怎么进行比较去重?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆