如何使用lodash实现对象数组按name字段不区分大小写去重
Lodash 实现不区分大小写的纯Microsoft条目去重
实现方案
核心思路是通过标准化name字段的格式,将所有仅大小写/首尾空格不同的纯Microsoft条目映射为同一个唯一标识,配合lodash的uniqBy方法实现去重。
完整代码
const _ = require('lodash'); const sourceData = [ { "_id": "5e3ccb88c9b3027ef4977894", "name": "microsoft" }, { "_id": "59ce020caa87df4da0ee2c77", "name": "Microsoft" }, { "_id": "5e077c78bc0d663d7170ba1c", "name": "MICROSOFT" }, { "_id": "608839e8d9271457814a7aa4", "name": "Microsoft " }, { "_id": "5ecd46657ffa9b761a0e41cd", "name": "Microsoft - MSN" }, { "_id": "5dfb47adbc0d663d716fe25f", "name": "Microsoft Alumni Foundation" } ]; // 处理逻辑:保留最后出现的纯Microsoft条目,和预期输出一致 const processedData = _.reverse( _.uniqBy( _.reverse([...sourceData]), item => { // 标准化name:去首尾空格 + 转小写,消除格式差异 const normalizedName = item.name.trim().toLowerCase(); // 纯Microsoft条目统一返回固定标识,实现去重 return normalizedName === 'microsoft' ? 'PURE_MS_FLAG' : normalizedName; } ) ); console.log(processedData);
逻辑说明
- 标准化处理:对
name先执行trim()去除首尾空格,再执行toLowerCase()统一转为小写,彻底消除大小写、首尾空格带来的判断差异 - 去重规则:所有标准化后值为
microsoft的条目,统一返回同一个固定标识,uniqBy会自动保留第一个遇到的该标识条目,其余直接过滤 - 顺序调整:如果需要和示例一样保留原数组中最后出现的纯Microsoft条目,先对数组做浅拷贝后反转再处理,处理完成后反转回原顺序即可
- 兼容性:其余带后缀的条目会根据标准化后的
name判断唯一性,不同后缀的条目不会被误过滤
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

