我有下面的JS对象:
let obj = { 'a': 1, 'a-gaboom': 1, 'b': 1, 'b-gaboom': 1 };
我想删除所有以'-gaboom'结尾的字段。我可以使用以下工具手动执行此操作:
'-gaboom'
delete obj['a-gaboom']; delete obj['b-gaboom'];
但是我想用一个RegExp动态地完成它?
l7wslrjt1#
您可以使用String.prototype.includes()或String.prototype.indexOf()来完成,即使它们不会考虑-gaboom是否出现在键的末尾或任何其他位置,或者使用String.prototype.endsWith(),这将确保匹配出现在键的末尾:
String.prototype.includes()
String.prototype.indexOf()
-gaboom
String.prototype.endsWith()
const obj = { 'a': 1, 'a-gaboom': 1, 'b': 1, 'b-gaboom': 1 }; for (const key in obj) { if (key.endsWith('-gaboom')) delete obj[key]; } console.log(obj);
无论如何,这将是RegExp的样子,它通过使用$确保-gaboom位于密钥的末尾,并且可以很容易地进行调整,以比上面的任何其他替代方案更灵活:
$
const obj = { 'a': 1, 'a-gaboom': 1, 'b': 1, 'b-gaboom': 1 }; for (const key in obj) { if (/-gaboom$/.test(key)) delete obj[key]; } console.log(obj);
如果您想使用可读性更强的代码或一行程序,我会使用@OriDrori的方法或类似的Array.prototype.reduce():
Array.prototype.reduce()
const obj = { 'a': 1, 'a-gaboom': 1, 'b': 1, 'b-gaboom': 1 }; const filtered = Object.keys(obj).filter(key => !/-gaboom$/.test(key)).reduce((acc, key) => { acc[key] = obj[key]; return acc; }, { }); console.log(filtered);
vaqhlq812#
你可以用Object.entries()获取对象的条目([key,value]对的数组)。Filter是条目数组,只保留键不以-gaboom结尾的条目。通过Object.fromEntries()转换回对象:
Object.entries()
Object.fromEntries()
const obj = {'a': 1,'a-gaboom': 1,'b': 1,'b-gaboom': 1} const result = Object.fromEntries( Object.entries(obj) .filter(([key]) => !key.endsWith('-gaboom')) ) console.log(result)
ycl3bljg3#
从其他答案中得到提示,使用该通用函数,可以消除在改变原始对象时验证特定条件的所有键。
deleteKeys = function (obj, fn) { Object.entries(obj) .filter(([key, value]) => fn(key, value)) .forEach(([key]) => delete obj[key]); }; const obj = {'a': 1,'a-gaboom': 1,'b': 1,'b-gaboom': 1}; deleteKeys(obj, (key) => !key.endsWith("-gaboom")); console.log(obj)
3条答案
按热度按时间l7wslrjt1#
您可以使用
String.prototype.includes()
或String.prototype.indexOf()
来完成,即使它们不会考虑-gaboom
是否出现在键的末尾或任何其他位置,或者使用String.prototype.endsWith()
,这将确保匹配出现在键的末尾:无论如何,这将是RegExp的样子,它通过使用
$
确保-gaboom
位于密钥的末尾,并且可以很容易地进行调整,以比上面的任何其他替代方案更灵活:如果您想使用可读性更强的代码或一行程序,我会使用@OriDrori的方法或类似的
Array.prototype.reduce()
:vaqhlq812#
你可以用
Object.entries()
获取对象的条目([key,value]对的数组)。Filter是条目数组,只保留键不以-gaboom
结尾的条目。通过Object.fromEntries()
转换回对象:ycl3bljg3#
从其他答案中得到提示,使用该通用函数,可以消除在改变原始对象时验证特定条件的所有键。