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 相关文章推荐
IE和FireFox(FF)中js和css的不同
Apr 13 Javascript
js 小贴士一星期合集
Apr 07 Javascript
使用JavaScript实现Java的List功能(实例讲解)
Nov 07 Javascript
解决jquery1.9不支持browser对象的问题
Nov 13 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
javascript中clone对象详解
Dec 03 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
Oct 15 Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 Javascript
Vue父子组件之间的通信实例详解
Sep 28 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
JavaScript中时间格式化新思路toLocaleString()
Nov 07 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
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
php一个找二层目录的小东东
2012/08/02 PHP
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
Python中线程编程之threading模块的使用详解
2015/06/23 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
python散点图实例之随机漫步
2018/08/27 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
护理学中专毕业生求职信
2013/11/11 职场文书
简历自我评价模板
2015/03/11 职场文书
什么是css原子化,有什么用?
2022/04/24 HTML / CSS