Angular中如何从含重复项的数组里取出每个name对应的唯一对象?
数组按name去重实现方案
参考的源数组数据示例:
核心逻辑
通过哈希集合(Set)记录已经保存过的name值,遍历原数组时仅保留同时满足以下两个条件的元素:
- 元素的
customer_id等于1 - 元素的
name值未在哈希集合中出现过
每保留一个元素就把对应的name加入哈希集合,避免后续同name元素被重复收录。该方案不受原数组排序影响,也可以自动适配后续新增的name类型,不需要修改静态配置。
代码示例
JavaScript 实现
// originalArr 替换为你实际获取的源数组 const originalArr = [/* 你的源数组数据 */]; const existedNames = new Set(); const filteredResult = []; for (const item of originalArr) { // 跳过customer_id不符合要求的元素 if (item.customer_id !== 1) continue; // 仅保留首次出现的name对应的元素 if (!existedNames.has(item.name)) { filteredResult.push(item); existedNames.add(item.name); } } // filteredResult 就是最终需要的数组
如果你偏好链式调用的写法,也可以用以下方式实现:
const existedNames = new Set(); const filteredResult = originalArr .filter(item => item.customer_id === 1) .filter(item => !existedNames.has(item.name) && existedNames.add(item.name));
Python 实现
# original_arr 替换为你实际获取的源数组 original_arr = [] # 你的源数组数据 existed_names = set() filtered_result = [] for item in original_arr: if item["customer_id"] != 1: continue if item["name"] not in existed_names: filtered_result.append(item) existed_names.add(item["name"])
方案优势
- 时间复杂度为O(n),仅需遍历一次源数组,性能优异
- 完全不受源数组元素排序的影响,同name元素无论在什么位置都能正确去重
- 自动适配name数量变化,后续新增任何name类型都不需要修改代码逻辑
内容的提问来源于stack exchange,提问作者ander99
相关产品推荐
相关产品推荐

