如何简洁替换数组中指定分类的记录 可使用lodash相关方法
数组指定分类数据批量替换实现方案
原生JS实现(无需额外依赖)
你的原有思路完全可行,原生JS可以直接用展开运算符简化为极简写法,逻辑清晰性能优异:
const targetCategory = 'platinum' const result = [ ...newPlatinumUsers, ...userCategory.filter(item => item.id !== targetCategory) ]
Lodash 实现
如果项目已经引入Lodash,可以用更语义化的_.reject方法实现,可读性更高:
const _ = require('lodash') const targetCategory = 'platinum' const result = _.concat(newPlatinumUsers, _.reject(userCategory, { id: targetCategory }))
以上两种实现的输出结果都和你给出的预期完全一致,时间复杂度均为O(n),和原实现性能持平但写法更简洁。
如果你需要严格保留原有分类的出现顺序(比如原有数组中gold出现在silver前面,替换后也要保留该顺序),可以使用分组实现:
const targetCategory = 'platinum' // 按分类分组并记录顺序 const categoryMap = new Map() userCategory.forEach(item => categoryMap.has(item.id) || categoryMap.set(item.id, [])) // 替换目标分类数据 categoryMap.set(targetCategory, newPlatinumUsers) // 填充其他分类数据 userCategory.forEach(item => item.id !== targetCategory && categoryMap.get(item.id).push(item)) // 扁平化得到结果 const result = Array.from(categoryMap.values()).flat()
内容的提问来源于stack exchange,提问作者karan92
相关产品推荐
相关产品推荐

