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修改CSS属性的代码
May 06 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
Jul 09 Javascript
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
jquery ajax分页插件的简单实现
Jan 27 Javascript
jQuery siblings()用法实例详解
Apr 26 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
微信小程序-消息提示框实例
Nov 24 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 Javascript
javaScript产生随机数的用法小结
Apr 21 Javascript
js实现简单放大镜效果
Mar 07 Javascript
es6数组includes()用法实例分析
Apr 18 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
PHP5常用函数列表(分享)
2013/06/07 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
ThinkPHP分页实例
2014/10/15 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
js字符串转成JSON
2013/11/07 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
深入理解Javascript中的this关键字
2015/03/27 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
简单介绍Python中的round()方法
2015/05/15 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
django框架基于queryset和双下划线的跨表查询操作详解
2019/12/11 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
Python3的socket使用方法详解
2020/02/18 Python
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
元旦晚会主持词
2014/03/24 职场文书
家长对孩子的评语
2014/04/18 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis