JavaScript中如何对多维数组(矩阵)去重的实现


Posted in Javascript onDecember 04, 2019

今天碰到了一个问题,需要对一个数组矩阵进行去重处理。

比如如下数组矩阵:

[ [1, 2, 3], [2, 3, 4], [2, 1, 3], [5, 6, 7] ]

接下来是去重处理的方法。

1.适用于纯数字数组矩阵和字符数字数组矩阵

// 本节用例:
// 1.纯数字数组矩阵
[
  [1, 2, 3],
  [2, 3, 4],
  [2, 1, 3],
  [5, 6, 7]
]
// 2.字符数字数组矩阵
[
  ['1', '2', '3'],
  ['2', '3', '4'],
  ['2', '1', '3'],
  ['5', '6', '7']
]

// 如果数字和字符数字混合的话,类似于 [1, '2', 3] 和 ['1', '2', 3] 会被认为是等价的...

主要利用对象属性名比较的方法,因为一个对象中每个属性的属性名是唯一的。

function unique(matrix) {
  let obj = {};
  let res = [];
  matrix.map(item => {
    item.sort((a, b) => a - b);
    if (!obj.hasOwnProperty(item)) {// 判断对象中是否有这个属性名
      obj[item] = item;
      res.push(item);
    }
  })
  return res;
}

上面的方法可以进一步优化成为:

// 这样更简洁
function unique(matrix) {
  let res = {};
  matrix.map(item => {
    item.sort((a, b) => a - b);
    res[item] = item;
  })
  return Object.values(res);
}

2.适用于纯文字字符数组矩阵

// 本节用例:
// 纯文字字符数组矩阵
[
  ["你的", "我", "它"],
  ["我", "你的", "它"],
  ["一", "二", "三"],
  ["三", "二", "一"],
  ["你d", "a", "它"],
  ["a", "你d", "它"],
  ["one", "two", "three"],
  ["three", "two", "one"]
]

分别利用对象属性名比较和ES6语法中的Set

(1) 利用属性名比较,将上面的方法稍微改动一下就可以实现

// 数组元素可能位置不同但元素内容相同,所以必须按照某一顺序对其进行排序,这里按首字母对字符串进行排序
function _unique(matrix) {
  let res = {};
  matrix.map(item => {
    item.sort((a, b) => a.localeCompare(b));
    res[item] = item;
  })
  return Object.values(res);
}

(2) 利用ES6语法中的Set,Set中的每个值都是唯一的

function _unique(matrix) {
  let res = [];
  matrix.map(item => {
    res.push(item.sort((a, b) => a.localeCompare(b)).toString());
  })
  // return Array.from(new Set(res)).map(item => item.split(','))
  return [...new Set(res)].map(item => item.split(','));// 上下等价
}

源码在此

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
修改发贴的编辑功能
Mar 07 Javascript
Javascript开发之三数组对象实例介绍
Nov 12 Javascript
THREE.JS入门教程(2)着色器-上
Jan 24 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
Feb 03 Javascript
AngularJS单选框及多选框实现双向动态绑定
Jan 13 Javascript
js调用webservice构造SOAP进行身份验证
Apr 27 Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
Dec 12 Javascript
原生js实现简单的焦点图效果实例
Dec 14 Javascript
解决Angular4项目部署到服务器上刷新404的问题
Aug 31 Javascript
js实现div色块碰撞
Jan 16 Javascript
Vue实现base64编码图片间的切换功能
Dec 04 #Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 #Javascript
Vue实现图片与文字混输效果
Dec 04 #Javascript
环形加载进度条封装(Vue插件版和原生js版)
Dec 04 #Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 #Javascript
在vue和element-ui的table中实现分页复选功能
Dec 04 #Javascript
vue项目中极验验证的使用代码示例
Dec 03 #Javascript
You might like
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
jQuery 使用手册(六)
2009/09/23 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
Python内置数据类型详解
2014/08/18 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
不可错过的十本Python好书
2017/07/06 Python
Python切片操作实例分析
2018/03/16 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
pandas针对excel处理的实现
2021/01/15 Python
联想台湾官网:Lenovo TW
2018/05/09 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
祖国在我心中演讲稿600字
2014/09/23 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
少先队中队工作总结
2015/08/14 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
Python实现双向链表基本操作
2022/05/25 Python
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang