set去重最直接高效,天然o(1)时间复杂度、自动忽略重复、代码简洁;适用于扁平数组或对象数组中status字段提取去重,并可结合合法状态集校验过滤非法值。

用 Set 去重是最直接、高效的方式,尤其适合处理 API 返回的字符串型状态枚举(如 "pending"、"success"、"failed"),避免重复渲染或逻辑误判。
为什么 Set 比 filter + indexOf / includes 更合适
Set 天然去重、插入和查找时间复杂度均为 O(1),而数组的 includes 在最坏情况下是 O(n),嵌套使用会导致 O(n²);另外 Set 构造时自动忽略重复值,代码更简洁、意图更清晰。
- API 返回的状态数组可能是扁平的:
["success", "pending", "success", "failed"] - 也可能是嵌套在对象中:
[{id: 1, status: "pending"}, {id: 2, status: "success"}, {id: 3, status: "pending"}] - Set 不关心顺序,但能确保每个枚举值只出现一次——这正是“清洗冗余”的核心目标
清洗扁平状态数组
直接传入数组构造 Set,再转回数组即可:
const rawStatuses = ["success", "pending", "success", "failed", "pending"]; const uniqueStatuses = [...new Set(rawStatuses)]; // → ["success", "pending", "failed"]
如果需要保持首次出现顺序(Set 默认保留插入顺序,所以没问题),无需额外处理;若需按业务规则排序(如 ["pending", "success", "failed"]),再链式调用 sort() 即可。
从对象数组中提取并清洗状态字段
先用 map 抽出所有 status,再用 Set 去重:
const apiResponse = [
{ id: 1, status: "pending" },
{ id: 2, status: "success" },
{ id: 3, status: "pending" },
{ id: 4, status: "failed" }
];
const uniqueStatuses = [...new Set(apiResponse.map(item => item.status))];
// → ["pending", "success", "failed"]
注意:确保每个对象都有 status 字段。如有缺失,可加保护逻辑:
const statuses = apiResponse .map(item => item.status) .filter(status => typeof status === 'string' && status.trim() !== ''); const uniqueStatuses = [...new Set(statuses)];
配合状态映射表做安全校验
清洗后建议与预定义的合法状态集比对,过滤掉非法值(如后端误传的 "unknow"):
const VALID_STATUSES = new Set(["pending", "success", "failed", "canceled"]); const raw = ["pending", "success", "unknow", "failed"]; const cleaned = [...new Set(raw)] .filter(status => VALID_STATUSES.has(status)); // → ["pending", "success", "failed"]
这样既去重,又兜底,提升前端健壮性。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










