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 相关文章推荐
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
jQuery中prop()方法用法实例
Jan 05 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
Nov 30 Javascript
Javascript之Math对象详解
Jun 07 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
JS 数字转换为大写金额的简单实例
Aug 04 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
浅谈js中的bind
Mar 18 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
使用原生js编写一个简单的框选功能方法
May 13 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
Sep 17 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之autoload运行机制实例分析
2014/08/28 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python ftp上传文件
2016/02/13 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
主题团日活动总结
2014/06/25 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis