ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 247|回复: 10

[求助] js 宏 二维数组去除重复值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-1-10 22:36 | 显示全部楼层 |阅读模式
var arr=[[1,2],[2,1],[1,2],[1,2],[2,1]]
//二维数组去重复值
arr=[[1,2],[2,1]] //最终想得到的结果

TA的精华主题

TA的得分主题

发表于 2025-1-10 23:36 | 显示全部楼层
用Set去重:
image.png

TA的精华主题

TA的得分主题

发表于 2025-1-11 01:13 | 显示全部楼层
  1. function 对二维数组去重(){
  2.         var arr=[[1,2],[2,1],[1,2],[1,2],[2,1]];
  3.         var obj={};
  4.             arr.forEach(v=>obj[v]=v);
  5.         var arr1=Object.values(obj);
  6.         Console.log(JSON.stringify(arr1));
  7. }
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-1-11 11:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 一江春水1688 于 2025-1-11 11:17 编辑

Snipaste_2025-01-11_01-19-15.png

TA的精华主题

TA的得分主题

发表于 2025-1-12 08:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-1-12 13:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. function test(){
  2.         const ARX = [ ["标题1", "标题2", "标题3"],
  3.   ["A", "B", "d"],
  4.   ["A", "d", "D"],
  5.   [3, 6, 9],
  6.   [3, 6, 9]
  7. ];
  8.         let StrBT=""
  9.         let data=GetQuChongArray2D(ARX,StrBT="标题1,标题2",BoolBiaoTi=true,BoolDX=false)
  10.         let SHB=Worksheets("Sheet1")
  11.         SHB.Range("A1:D200").ClearContents()
  12.         SHB.Range("A1").Resize(data.length,data[0].length).Value2=data;  // 粘贴数组          
  13. }

  14. function GetQuChongArray2D(ARX,StrBT="",BoolBiaoTi=true,BoolDX=false){
  15.         //函数:GetQuChongArray2D  二维数组去重 按照一列 或 多列判断
  16.         //参数: ARX           二维数组
  17.         //参数: StrBT         可选 判断用的标题  默认="" //全部标题, BoolBiaoTi=false //则标题使用 F1,F2,F3 代替
  18.         //参数: BoolBiaoTi    可选 数组标题  默认=false //无标题; =true //有标题
  19.         //参数: BoolDX        可选 区分大小写  默认=true //区分大小写; =false //不区分;
  20.         //方法:let data=GetQuChongArray2D(ARX,StrBT="标题1,标题2",BoolBiaoTi=true,BoolDX=false);
  21.         //作者:北极狐工作室 QQ:14885553
  22.        
  23.         // 复制数组以免直接修改原始数组
  24.         let aArray =ARX;
  25.         let data=[];  //结果数组
  26.         let IntA=0  //数据开始行数
  27.         let IntX=0  //数据开始行数
  28.          
  29.         let ZAC = new Dict();  // 字典使用示例
  30.         if(BoolBiaoTi==true){ //是否有标题行
  31.                 IntA=1  //数据开始行数
  32.                 IntX=1  //数据开始行数
  33.                 data.push(aArray[0])
  34.                 for(let i=0;i<aArray[0].length;i++){
  35.                         data[0][i]=aArray[0][i]
  36.                         ZAC.add(aArray[0][i] ,i);  //添加一对Key和Item
  37.                 }
  38.         } else {
  39.                 //没有标题时, 用[F1],[F2],[F3] 来代替标题
  40.                 for(let i=0;i<aArray[0].length;i++){
  41.                         ZAC.add("F"+(i+1) ,i);  //添加一对Key和Item
  42.                 }
  43.         }
  44.         let BRX=[];   //判断用的标题
  45.         if(StrBT==""){
  46.                 BRX=ZAC.getKeys()
  47.         } else {
  48.                 BRX=StrBT.split(",")
  49.         }

  50.         let ZAD = new Dict(); // 字典使用示例
  51.         for(let i=IntA;i<aArray.length;i++){
  52.                 let StrX=""
  53.                 for(let y=0;y<BRX.length;y++){
  54.                         let StrA=""
  55.                         if(aArray[i][ZAC.getItem(BRX[y])]==NaN || aArray[i][ZAC.getItem(BRX[y])]=='' || aArray[i][ZAC.getItem(BRX[y])]==null || aArray[i][ZAC.getItem(BRX[y])]==undefined){
  56.                                 StrX+=""
  57.                         } else {
  58.                                 if(BoolDX==false){
  59.                                         StrX+=aArray[i][ZAC.getItem(BRX[y])].toString().toUpperCase()
  60.                                 } else {
  61.                                         StrX+=aArray[i][ZAC.getItem(BRX[y])]
  62.                                 }
  63.                         }
  64.                 }
  65.                 if(ZAD.hasKey(StrX)==false){
  66.                         IntX+=1
  67.                         ZAD.add(StrX,IntX);  //添加一对Key和Item
  68.                         data.push(aArray[i])        
  69.                 }
  70.         }
  71.         return data;  //原封不动
  72. }
  73.        
复制代码

TA的精华主题

TA的得分主题

发表于 2025-1-12 14:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

这个写法,在我的WPS不支持,可能是我的WPS不支持??这个语法糖,改写了下,这样也等效:
image.png

TA的精华主题

TA的得分主题

发表于 2025-1-12 21:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 Again123456 于 2025-1-12 22:04 编辑
LIUZHU 发表于 2025-1-12 14:26
这个写法,在我的WPS不支持,可能是我的WPS不支持??这个语法糖,改写了下,这样也等效:

image.png

image.png
数组当字典用,有个BUG,遇数字key,会出错



image.png
这样肯定没问题


TA的精华主题

TA的得分主题

发表于 2025-1-13 08:19 | 显示全部楼层
  1. async function 去重_包括引用类型(){       
  2.         await fetch("https://cdnjs.cloudflare.com/ajax/libs/ramda/0.29.1/ramda.min.js").then(x => x.text()).then(c => eval(c));// 首先引入 Ramda 库
  3.         const arr = [[1,2],[2,1],[1,2],[1,2],[2,1],[3],0,1,"1",true,"true"];// 原始数组       
  4.         const uniqueArr = R.uniqWith(R.equals, arr);// 使用 uniqWith 和 equals 函数去重       
  5.         console.log(JSON.stringify(uniqueArr)); // 输出: [[1,2],[2,1],[3],0,1,"1",true,"true"]
  6. }
复制代码
QQ截图20250113081915.png

TA的精华主题

TA的得分主题

发表于 2025-1-13 11:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-16 17:37 , Processed in 0.039206 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表