jsons.top工具之数组交集、去重

作为一名程序员,一款高效的 在线转换工具 (在线时间戳转换 计算器 字节单位转换 json格式化)必不可少!https://jsons.top

用js实现一个轻量级的集合运算工具,可以对数组、集合去重、求交并差集,找出两个集合之间的公共部分、差异部分,可以用于数据比对提效。

最近新增了一个“数组交集”的功能,起初是因为在做表迁移时,需要手动将两个表的字段进行对比,其中2个表分别有上百个字段,放到excel里面排序后对比字段差异不是很明显,且很手工操作很痛苦,于是有了这个做数组交并补集的小工具。

场景1: 集合运算,字段差异对比,多个字段或集合进行去重、合并、求交集、差集、并集

如:数据迁移时,两个表的字段都比较多,需要比较两个表的差异时:
1. 对两个表的字段进行合并,即a集合与b集合求并集,自动去重复元素
2. 找出两个表的共同字段,求a集合与b集交集

3. 找出A表比B表多的字段,即a-b
4. 找出A表比表B少的字段,即b-a

场景2: 字段格式化,将字符串文本按照分隔符拆分为单个字段,并自动换行,目前支持的拆分字符有:空格、换行、冒号:    逗号,分号; 

如: 1,2,3,4,5 11 22 33 44    55 111;222;333 111:1111:22222

场景3: 字段对比,将表的字段与值对齐

如:一段打印日志里面,数据的值和对应的列名看上去不清晰直观,则可以拆分换行对齐后查看。
name,id,age,class
"zhang3",00000111,18,一年级1班

场景4: 解析ddl,提取字段, 支持mysql,hive,flink ddl语法

CREATE TABLE  table_name (  
    id   int COMMENT '注释信息',  
    name varchar COMMENT '注释信息',  
    age  long COMMENT '注释信息'
); 
直接解析ddl语句中的字段名 [id,name,age]

<think>好的,我现在需要帮助用户找到如何使用Lodash.js获取两个数组交集的例子。首先,我得回想一下Lodash库的相关方法。记得Lodash有一个名为_.intersection的函,可以处理数组交集问题。但用户的具体需求可能是什么?他们可能想要基本用法,或者需要处理更复杂的情况,比如元素复的情况。 接下来,我需要确认用户提供的引用内容。用户引用了几个LeetCode的问题和解决方案,比如349和350题,这两个题目分别处理数组交集的不同情况。349题要求唯一元素,而350题允许元素出现多次。但用户现在的问题是针对Lodash.js的,所以可能需要将LeetCode中的思路转换为Lodash的实现方式。 Lodash的_.intersection函默认返回两个数组交集,但每个元素只出现一次,类似于LeetCode的349题的结果。如果用户需要像350题那样保留复元素,可能需要其他方法,比如计每个元素出现的次,并取最小值。但Lodash本身是否有这样的函呢?或者需要结合其他方法来实现? 用户可能希望得到一个明确的例子,所以需要分步骤说明。首先,引入Lodash库,然后使用_.intersection函。例如,数组arr1和arr2的交集就是_.intersection(arr1, arr2)。但要注意,结果中的元素是唯一的,不管原数组有多少复。如果用户需要保留复次,可能需要自己处理,比如遍历交集元素,统计在两个数组中出现的次,然后添加相应的量。 另外,用户可能遇到的常见问题包括:如何处理多个数组交集?Lodash的_.intersection可以接受多个数组,返回所有数组交集。例如,三个数组交集就是_.intersection(arr1, arr2, arr3)。 还需要注意,Lodash的安装和引入方式。用户可能需要知道如何通过npm安装,或者在浏览器中引入CDN链接。例如,使用script标签引入Lodash库,或者在Node.js项目中通过require引入。 然后,我需要检查用户提供的引用内容中的代码示例,看看是否有可以借鉴的地方。例如,引用3和4中的C++代码使用了集合和哈希表来记录元素,以确保唯一性。而引用5中的Python代码使用了集合交集,然后计算每个元素的最小出现次。如果用户需要类似LeetCode 350题的解决方案,可能需要结合Lodash的_.intersection和其他方法,比如过滤数组,统计次。 但根据用户的问题,他们可能只需要基本的交集示例,所以首先展示_.intersection的基本用法,然后如果有更复杂的需求,再进一步说明如何处理。比如,如果需要保留复元素,可以给出一个自定义函的例子,使用Lodash的计和循环来生成结果数组。 总结,回答应包括以下几点: 1. 引入Lodash库的方法。 2. _.intersection的基本使用示例。 3. 说明结果元素的唯一性。 4. 如何处理多个数组交集。 5. 如果需要保留复元素,提供自定义解决方案的思路或代码。 同时,要确保回答结构清晰,步骤明确,并引用用户提供的参考资料中的相关信息。例如,引用[^5]中的方法使用了集合交集和最小次,这可能对用户实现类似功能有帮助,但需要使用Lodash的函来实现。</think>要使用 Lodash.js 获取两个数组交集,可以通过 `_.intersection` 方法实现。以下是分步说明和示例: --- ### 1. 基本用法 `_.intersection` 方法返回两个数组交集,且结果中的元素**唯一**(类似LeetCode 349题要求[^4]): ```javascript const _ = require('lodash'); // 引入Lodash const arr1 = [1, 2, 2, 3]; const arr2 = [2, 3, 4]; const result = _.intersection(arr1, arr2); console.log(result); // 输出: [2, 3] ``` --- ### 2. 多个数组交集 该方法支持传入多个数组,返回所有数组的共同元素: ```javascript const arr3 = [2, 3, 5]; const multiIntersection = _.intersection(arr1, arr2, arr3); console.log(multiIntersection); // 输出: [2, 3] ``` --- ### 3. 保留复元素的交集(类似LeetCode 350题) 若需保留复元素(如元素 `2` 出现两次),需自定义逻辑: 1. 先获取唯一交集; 2. 遍历交集元素,统计在两个数组中的最小出现次; 3. 按次填充结果数组。 ```javascript function intersectWithDuplicates(arr1, arr2) { const uniqueIntersection = _.intersection(arr1, arr2); const countMap = new Map(); // 统计arr1中元素的出现次 arr1.forEach(num => { if (uniqueIntersection.includes(num)) { countMap.set(num, (countMap.get(num) || 0) + 1); } }); // 统计并取最小值 const result = []; uniqueIntersection.forEach(num => { const countInArr2 = arr2.filter(x => x === num).length; const minCount = Math.min(countMap.get(num), countInArr2); result.push(...Array(minCount).fill(num)); }); return result; } // 示例 console.log(intersectWithDuplicates([1,2,2,3], [2,2,3])); // 输出: [2,2,3] ``` --- ### 4. 引用说明 - `_.intersection` 的底层实现基于哈希表,时间复杂度为 $O(n)$[^3]; - 若需处理更复杂的据结构(如对象数组),可结合 `_.intersectionWith` 使用自定义比较器[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值