JavaScript多维数组(矩阵)去重实现方案
作者:闭包旅人时间:2026-10-23 13:35:35浏览:308
本文介绍如何在JavaScript中对多维数组(矩阵)进行去重处理。针对纯数字和字符数字混合矩阵,通过排序后利用对象属性名唯一性实现;针对纯字符串矩阵,结合排序与ES6的Set数据结构,提供简洁高效的去重代码示例。
多维数组去重概述
在处理数据时,有时会遇到需要对多维数组(即矩阵)执行去重操作的需求。
例如,面对如下结构的数据矩阵:
[ [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] 会被认为是等价的...
核心思路是利用对象属性名的唯一性。由于JavaScript对象中每个属性的名称必须是唯一的,我们可以利用这一特性来过滤重复项。
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(','));// 上下等价
}
完整源码如下所示。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
作者最新文章
怎么用 Promise 封装 JavaScript sleep 函数实现异步延时
2026-11-05 17:49:14
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
相关标签:
