JavaScript中如何对多维数组(矩阵)去重的实现
今天碰到了一个问题,需要对一个数组矩阵进行去重处理。
比如如下数组矩阵:
[[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]会被认为是等价的...
主要利用对象属性名比较的方法,因为一个对象中每个属性的属性名是唯一的。
functionunique(matrix){ letobj={}; letres=[]; matrix.map(item=>{ item.sort((a,b)=>a-b); if(!obj.hasOwnProperty(item)){//判断对象中是否有这个属性名 obj[item]=item; res.push(item); } }) returnres; }
上面的方法可以进一步优化成为:
//这样更简洁 functionunique(matrix){ letres={}; matrix.map(item=>{ item.sort((a,b)=>a-b); res[item]=item; }) returnObject.values(res); }
2.适用于纯文字字符数组矩阵
//本节用例: //纯文字字符数组矩阵 [ ["你的","我","它"], ["我","你的","它"], ["一","二","三"], ["三","二","一"], ["你d","a","它"], ["a","你d","它"], ["one","two","three"], ["three","two","one"] ]
分别利用对象属性名比较和ES6语法中的Set
(1)利用属性名比较,将上面的方法稍微改动一下就可以实现
//数组元素可能位置不同但元素内容相同,所以必须按照某一顺序对其进行排序,这里按首字母对字符串进行排序 function_unique(matrix){ letres={}; matrix.map(item=>{ item.sort((a,b)=>a.localeCompare(b)); res[item]=item; }) returnObject.values(res); }
(2)利用ES6语法中的Set,Set中的每个值都是唯一的
function_unique(matrix){ letres=[]; matrix.map(item=>{ res.push(item.sort((a,b)=>a.localeCompare(b)).toString()); }) //returnArray.from(newSet(res)).map(item=>item.split(',')) return[...newSet(res)].map(item=>item.split(','));//上下等价 }
源码在此
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。