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 相关文章推荐
node.js中的http.request方法使用说明
Dec 14 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
JavaScript中数组继承的简单示例
Jul 29 Javascript
prototype框架中美元符号$用法分析
Jan 22 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
基于Vue的延迟加载插件vue-view-lazy
May 21 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
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实现WEB动态网页静态
2006/10/09 PHP
PHP中文汉字验证码
2007/04/08 PHP
深入PHP FTP类的详解
2013/06/13 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
教你安装python Django(图文)
2013/11/04 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
python在不同条件下的输入与输出
2020/02/13 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
预备党员党校学习自我评价分享
2013/11/12 职场文书
采购文员岗位职责
2013/11/20 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
单位收入证明范本
2015/06/18 职场文书
小学生运动会广播
2015/08/19 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
python 经纬度求两点距离、三点面积操作
2021/06/03 Python