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 相关文章推荐
Javascript 类与静态类的实现
Apr 01 Javascript
javascript实现数字验证码的简单实例
Feb 10 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
深入浅析search 搜索框的写法
Aug 02 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
Vue.directive()的用法和实例详解
Mar 04 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 Javascript
TypeScript类型声明书写详解
Aug 28 Javascript
javascript实现支付宝滑块验证码效果
Jul 24 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 数组使用详解 推荐
2011/06/02 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
js三种排序算法分享
2012/08/16 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
草莓网官网:StrawberryNET
2019/08/21 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
中间件分为哪几类
2012/03/14 面试题
高三英语教学计划
2015/01/23 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
夫妻吵架保证书
2015/05/08 职场文书
教务处干事工作总结
2015/08/14 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
2019年工作总结范文
2019/05/21 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python