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 相关文章推荐
textContent在Firefox下与innerText等效的属性
May 12 Javascript
Ajax 数据请求的简单分析
Apr 05 Javascript
js实现网页随机切换背景图片的方法
Nov 01 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
canvas实现图像截取功能
Feb 06 Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
浅谈微信小程序列表埋点曝光指南
Oct 15 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
Nov 07 Javascript
webpack的移动端适配方案小结
Jul 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 取得瑞年与平年的天数的代码
2009/08/10 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python实现微信防撤回神器
2019/04/29 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
python getpass实现密文实例详解
2019/09/24 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python enumerate内置库用法解析
2020/02/24 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
个人欠款担保书
2014/05/20 职场文书
酒店员工培训方案
2014/06/02 职场文书
质量月口号
2014/06/20 职场文书
父亲节活动总结
2015/02/12 职场文书
风之谷观后感
2015/06/11 职场文书
2016年元旦主持词
2015/07/06 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
如何利用Python实现一个论文降重工具
2021/07/09 Python