js中数组去重的方法

哎呀,说实话,从事前端这些年,我对数组去重这件事很担心。
我记得当时我在一家初创公司工作。
当时,该公司只有几个人从事内容管理系统的工作。
需求是每天处理各种杂乱的数据,包括数组去重。

当时我还年轻,对JavaScript的各种API不熟悉,所以只是喜欢玩玩。
起初,我使用了 forEach 和 splice,并想到能够直接使用原始数组该有多酷。
结果代码写得跟狗啃一样,而且关键性能还是很糟糕。
有一次,当我处理1 0万条大量数据时,我的电脑像石头一样卡住了。
我当时真的很想哭。

后来,我痛定思痛,开始寻找其他减肥方法。
例如,这个集合简单高效,时间复杂度接近O(n)。
当时我就想:为什么没有人告诉我这件事呢?于是我用Set对数组进行去重,发现性能确实有明显提升,而且代码也简单了很多。

后来,随着公司项目的增长,我开始研究对象数组的重复数据删除。
这时我才意识到Set还不够。
于是我开始研究Map,并使用JSON.stringify作为对象的唯一标识符。
这个方法非常有效。
虽然性能较差,但是可以解决问题。

回过头来,这些方法都有其自身的缺陷。
例如filter和indexOf兼容性很好,但是性能较差,不适合处理大数组。
另一个例子是Reduce。
逻辑很清晰,但是使用大数组就有点麻烦了。

所以在前端开发中,需要根据实际情况选择合适的方法。
对于小数组你可以随意这样做,但是对于大数组Set更可靠。
至于对象数组,那就得根据具体的需求了,有时候还需要自己写一些东西。

哎,这个技术性的东西越了解越觉得自己无知,不过也就这样了。
谁告诉我们要技术的?怎样才能在不遇到陷阱的情况下取得进步呢?哈哈。

js中数组去重方法总结

集合是删除重复项最直接的方法。
集合保证了独特的成员。
我在项目中使用过Set,效果不错。
lastIndexOf效率低下,谨慎使用。
第一个存储在新数组中,并在循环中进行比较,这是有效的。
拼接手术比较复杂,不推荐。
Include与filter结合是一个很好的方法。
indexOf 比lastIndexOf 更快。
对象属性去重是没有用的。
你自己掂量一下吧。

JavaScript 数组唯一元素提取:利用 indexOf 和 lastIndexOf 精准去重

使用 IndexOf 和 lastIndexOf 提取唯一项是高效的。

indexOf(val) 返回索引的第一个匹配项,lastIndexOf 返回最后一个匹配项。

判断唯一:IndexOf(val) === lastIndexOf(val) 为 true。

代码: JavaScript 常量 arr = [1 00, 1 2 3 , 1 00, 1 2 2 , 1 1 9 , 2 03 , 1 2 3 , 7 6 , 8 9 ]; const getUniqueElements = (数据) => { return data.filter(val => data.indexOf(val) === data.lastIndexOf(val)); }; 静态结果 = getUniqueElements(arr); 控制台.log(结果); // [1 2 2 , 1 1 9 , 2 03 , 7 6 , 8 9 ]
示例: 矩阵[1 ,2 ,3 ,1 ,2 ]: 第 1 项:指针(1 ) = 0,否则指针(1 ) = 3 , 0 === 3 ?骗子,过滤一下。
第 3 项:指针(3 ) = 2 ,否则指针(3 ) = 2 , 2 === 2 ?确实,有所保留。

性能问题: 时间复杂度为O(n²),不适合百万级数据。

改进计划: 使用地图计算频率: JavaScript const getUniqueElementsOptimized = (数据) => { constFrequencyMap = newMap(); data.forEach(val =>FrequencyMap.set(val, (FrequencyMap.get(val) || 0) + 1 )); return data.filter(val =>FrequencyMap.get(val) === 1 ); };
关于数据类型的注释: 仅适用于数字和字符串等基本类型。

参考类型: IndexOf 和lastIndexOf 是严格的,只匹配相同的引用。

良好的阅读能力: 逻辑直观且易于理解。

自己掂量一下。