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 相关文章推荐
用jquery写的一个万年历(自写)
Jan 20 Javascript
JavaScript中的Primitive对象封装介绍
Dec 31 Javascript
浅谈Javascript中的Function与Object
Jan 26 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
canvas滤镜效果实现代码
Feb 06 Javascript
jQuery控制元素隐藏和显示
Mar 03 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
Aug 04 Javascript
基于 D3.js 绘制动态进度条的实例详解
Feb 26 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
JavaScript实现随机点名器
Mar 25 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文本数据库的搜索方法
2006/10/09 PHP
编写自己的php扩展函数
2006/10/09 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
vue单页缓存方案分析及实现
2018/09/25 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
Python中for循环详解
2014/01/17 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
理解Python中函数的参数
2015/04/27 Python
Python实现数据库编程方法详解
2015/06/09 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
python实时监控logstash日志代码
2020/04/27 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
活动策划邀请函
2014/02/06 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
平安工地建设方案
2014/05/06 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL