JS实现的Object数组去重功能示例【数组成员为Object对象】


Posted in Javascript onFebruary 01, 2019

本文实例讲述了JS实现的Object数组去重功能。分享给大家供大家参考,具体如下:

目标:实现成员为 Object 的数组的去重。

注意,这里的数组成员为 Object,而不是数值或者字符串。

调用方法:

arr = distinct_arr_element(arr);

函数:

/*
 * 在数组中去除重复项()
 */
var distinct_arr_element = function( arr ){
  if( !arr ) return null ;
  var resultArr = [];
  $(arr).each( function( index, el ){
    var notExist = true ;
    $(resultArr).each( function(i,element){
      if( isObjectValueEqual( el, element ) ){
        notExist = false ;
        return false ;
      }
    });
    if( notExist )
      resultArr.push( el );
  });
  return resultArr ;
}
/*
 * 判断两个 Object 的值是否相等
 */
function isObjectValueEqual(a, b) {
  // Of course, we can do it use for in Create arrays of property names
  var aProps = Object.getOwnPropertyNames(a);
  var bProps = Object.getOwnPropertyNames(b);
  // If number of properties is different, objects are not equivalent
  if (aProps.length != bProps.length) {
    return false;
  }
  for ( var i = 0; i < aProps.length; i++ ) {
    var propName = aProps[i];
    // If values of same property are not equal, objects are not equivalent
    if (a[propName] !== b[propName]) {
      return false;
    }
  }
  // If we made it this far, objects are considered equivalent
  return true;
}

完整测试示例如下:

<script src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
<script>
/*
 * 在数组中去除重复项()
 */
var distinct_arr_element = function( arr ){
  if( !arr ) return null ;
  var resultArr = [];
  $(arr).each( function( index, el ){
    var notExist = true ;
    $(resultArr).each( function(i,element){
      if( isObjectValueEqual( el, element ) ){
        notExist = false ;
        return false ;
      }
    });
    if( notExist ) 
      resultArr.push( el );
  });
  return resultArr ;
}
/*
 * 判断两个 Object 的值是否相等
 */
function isObjectValueEqual(a, b) {
  // Of course, we can do it use for in Create arrays of property names
  var aProps = Object.getOwnPropertyNames(a);
  var bProps = Object.getOwnPropertyNames(b);
  // If number of properties is different, objects are not equivalent
  if (aProps.length != bProps.length) {
    return false;
  }
  for ( var i = 0; i < aProps.length; i++ ) {
    var propName = aProps[i];
    // If values of same property are not equal, objects are not equivalent
    if (a[propName] !== b[propName]) {
      return false;
    }
  }
  // If we made it this far, objects are considered equivalent
  return true;
}
var arrDemo=[{'name':'3water.com'},{'name':'3water.com'},{'age':10},{'age':12}];
console.log(distinct_arr_element(arrDemo))
</script>

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JS实现的Object数组去重功能示例【数组成员为Object对象】

Javascript 相关文章推荐
基于jquery1.4.2的仿flash超炫焦点图播放效果
Apr 20 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
Nov 25 Javascript
按下Enter焦点移至下一个控件的实现js代码
Dec 11 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
解决js图片加载时出现404的问题
Nov 30 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
Aug 19 Javascript
借助node实战JSONP跨域实例
Mar 30 Javascript
webpack学习教程之publicPath路径问题详解
Jun 17 Javascript
H5实现仿flash效果的实现代码
Sep 29 Javascript
微信小程序中换行空格(多个空格)写法详解
Jul 10 Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 Javascript
js表达式与运算符简单操作示例
Feb 15 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 #Javascript
Electron 如何调用本地模块的方法
Feb 01 #Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
Feb 01 #Javascript
原来JS还可以这样拆箱转换详解
Feb 01 #Javascript
微信小程序拍照和摄像功能实现方法示例
Feb 01 #Javascript
微信小程序常用简易小函数总结
Feb 01 #Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 #Javascript
You might like
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python yield 小结和实例
2014/04/25 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
应届大学生的推荐信
2013/11/20 职场文书
家具厂厂长岗位职责
2014/01/01 职场文书
医院实习介绍信
2014/01/12 职场文书
合伙经营协议书范本
2014/04/18 职场文书
学校安全责任书范本
2014/07/23 职场文书
2014年话务员工作总结
2014/11/19 职场文书
2015年助残日活动总结
2015/03/27 职场文书
交通事故被告代理词
2015/05/23 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
JavaScript流程控制(循环)
2021/12/06 Javascript