JavaScript中如何对多维数组(矩阵)去重的实现

 更新时间:2019年12月04日 09:13:25   作者:Starlight  
这篇文章主要介绍了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] 会被认为是等价的...

主要利用对象属性名比较的方法,因为一个对象中每个属性的属性名是唯一的。

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(','));// 上下等价
}

源码在此

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Js base64 加密解密介绍

    Js base64 加密解密介绍

    想必大家对base64并不陌生吧,在本文将为大家介绍下Js中的base64加密解密过程,感兴趣的朋友不要错过
    2013-10-10
  • 浅谈JS运算符&&和|| 及其优先级

    浅谈JS运算符&&和|| 及其优先级

    下面小编就为大家带来一篇浅谈JS运算符&&和|| 及其优先级。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • 微信小程序开发之实现别踩白块游戏

    微信小程序开发之实现别踩白块游戏

    这篇文章主要为大家详细介绍了如何通过微信小程序开发一个简单的别踩白块游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以和小编一起学习一下
    2023-02-02
  • 微信小程序实现传递多个参数与事件处理

    微信小程序实现传递多个参数与事件处理

    这篇文章主要介绍了微信小程序实现传递多个参数与事件处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 使用Electron自制录屏软件

    使用Electron自制录屏软件

    录屏软件对于我们来说都不陌生了,本文我们要做的事情是实现自己的录屏软件,载体使用Electron,因为它更适合录制桌面的场景,下面我们就来看看具体实现方法吧
    2024-01-01
  • 用Golang运行JavaScript的实现示例

    用Golang运行JavaScript的实现示例

    这篇文章主要介绍了用Golang运行JavaScript的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • js原生map实现的方法总结

    js原生map实现的方法总结

    在本篇文章里小编给大家整理了关于js原生map实现的方法以及实例分析内容,需要的朋友们可以参考下。
    2020-01-01
  • 国外JavaScript经典封装集合整理

    国外JavaScript经典封装集合整理

    国外JavaScript经典封装集合整理...
    2007-05-05
  • JS实现的简单下拉框联动功能示例

    JS实现的简单下拉框联动功能示例

    这篇文章主要介绍了JS实现的简单下拉框联动功能,涉及javascript事件响应及页面元素属性动态修改相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • 详解JS如何进行变量解构

    详解JS如何进行变量解构

    JavaScript中,可以使用解构赋值的方式来对数组或者对象进行变量解构,下面小编就来为大家详细介绍一下JavaScript实现数组或者对象解构的方法吧
    2023-11-11

最新评论