gke*_*ley 0 javascript regex algorithm object
我有以下 JS 对象:
let obj = {
'a': 1,
'a-gaboom': 1,
'b': 1,
'b-gaboom': 1
};
Run Code Online (Sandbox Code Playgroud)
我想删除所有以 . 结尾的字段'-gaboom'
。
我可以手动完成:
delete obj['a-gaboom'];
delete obj['b-gaboom'];
Run Code Online (Sandbox Code Playgroud)
但我想使用正则表达式动态地执行此操作?
您可以使用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);
Run Code Online (Sandbox Code Playgroud)
无论如何,这就是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);
Run Code Online (Sandbox Code Playgroud)
如果你想要一些更具可读性的东西或者一句台词,我会选择@OriDrori的方法或类似的方法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);
Run Code Online (Sandbox Code Playgroud)