如何用Lodash删除对象中以指定前缀开头的属性?
解决用Lodash删除对象中指定前缀属性的问题
嘿,我来帮你搞定这个问题!你当前的代码用_.omit(object, prop)只能删除精确匹配属性名的单个属性,所以没法处理前缀匹配的场景。要实现删除所有以指定字符串开头的属性,我们可以利用Lodash的特性做两种改进:
方法一:直接用_.omit的函数判断逻辑
_.omit的第二个参数支持传入一个函数,这个函数会遍历对象的每个属性,返回true就会把对应属性从结果中剔除。我们可以在函数里检查属性名是否以目标前缀开头:
var obj = { a: 1, b: 2, aa: 3 }; function deletePropsThatStartsWith(object, prefix) { // 用原生startsWith判断属性名前缀,返回true的属性会被剔除 return _.omit(object, (_, key) => key.startsWith(prefix)); } console.log(deletePropsThatStartsWith(obj, 'a')); // 输出 { b: 2 }
如果需要兼容不支持String.prototype.startsWith的旧浏览器,换成Lodash自带的_.startsWith更稳妥:
function deletePropsThatStartsWith(object, prefix) { return _.omit(object, (_, key) => _.startsWith(key, prefix)); }
方法二:先筛选出要删除的属性名数组
先通过Object.keys拿到对象所有属性名,筛选出符合前缀条件的属性,再把这个数组传给_.omit:
var obj = { a: 1, b: 2, aa: 3 }; function deletePropsThatStartsWith(object, prefix) { // 筛选出所有以prefix开头的属性名 const propsToRemove = Object.keys(object).filter(key => key.startsWith(prefix)); // 批量删除这些属性 return _.omit(object, propsToRemove); } console.log(deletePropsThatStartsWith(obj, 'a')); // 输出 { b: 2 }
这两种方法都能完美实现你要的效果,选哪种都可以——第一种更简洁,第二种逻辑更直观,适合需要对要删除的属性做额外处理的场景。
内容的提问来源于stack exchange,提问作者maxd
相关产品推荐
相关产品推荐

