处理数据时,经常遇到数组里有重复项,还要求按一定顺序排列。比如统计用户提交的标签,或者整理一批商品价格,重复的得去掉,还得从小到大排好。这时候,数组去重排序就成了家常便饭。
JavaScript 中的常见做法
前端开发中,用 JavaScript 处理数组最常见。利用 Set 数据结构可以快速去重,再结合 sort 方法排序:
const arr = [3, 1, 4, 1, 5, 9, 2, 6, 5];
const uniqueSorted = [...new Set(arr)].sort((a, b) => a - b);
console.log(uniqueSorted); // [1, 2, 3, 4, 5, 6, 9]
这里先用 new Set 去重,再用扩展运算符转回数组,最后调用 sort 按数值升序排列。注意如果不用 (a, b) => a - b,数字会按字符串比较,导致 10 排在 2 前面。
Python 一行搞定
在 Python 里更简洁,直接用 sorted 套 set:
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5]
result = sorted(set(arr))
print(result) # [1, 2, 3, 4, 5, 6, 9]
既去重又升序,代码干净利落。要是想降序,加个 reverse=True 就行。
实际场景:订单金额去重排序
假设你导出了一堆订单数据,金额列有重复,领导要看所有不重复的金额从低到高分布情况。原始数据可能是这样的:
[89.5, 102, 89.5, 150, 102, 75, 200, 75]
用上面的方法处理后,得到清晰的结果:
[75, 89.5, 102, 150, 200]
一眼就能看出价格区间和关键档位,做报表也方便多了。
注意点:别忽略数据类型
有时候数组里混着数字和字符串形式的数字,比如 [1, '1', 2, '2'],直接去重不会合并这些值。需要先统一转类型:
const arr = [1, '1', 2, '2', 3];
const normalized = arr.map(item => Number(item));
const result = [...new Set(normalized)].sort((a, b) => a - b);
// 得到 [1, 2, 3]
不然看着像去重了,其实漏了隐式类型差异的问题。