整理了几种常见的手机号验证场景:11 位号码提取、重复检测、跨平台状态同步。用 Set 做排重比数组遍历效率高很多,特别是数据量大的时候。
基础正则提取
const phoneRegex = /1[3-9]\d{9}/g;
const text = "联系 13800138000 或 15912345678";
const phones = text.match(phoneRegex);
// ['13800138000', '15912345678']
重复检测
const seen = new Set();
const duplicates = [];
phones.forEach(phone => {
if (seen.has(phone)) {
duplicates.push(phone);
} else {
seen.add(phone);
}
});
跨平台状态同步
我的充值助手支持多个平台(网易云、芒果、优酷),每个平台有独立的已充值集合。用对象存储,键是平台名,值是 Set。
性能对比
测试 10000 个号码:数组 includes 遍历平均 120ms,Set has 平均 2ms。差距巨大。