我正在重构代码,并希望减少我编写的代码行,这是我的代码:
let { user, change_log, new_value, old_value } = req.query;
user = user.replace(/'/g, "\\'");
change_log = change_log.replace(/'/g, "\\'");
new_value = new_value.replace(/'/g, "\\'");
old_value = old_value.replace(/'/g, "\\'");
所以我想使其像这样的单行或几行代码:
user, change_log, new_value, old_value =
(user, change_log, new_value, old_value).replace(/'/g, "\\'");
这样,我不必重复每个变量就可以添加一个replace方法。这有可能还是我应该坚持当前的解决方案?
感谢那些能回答我的问题的人,如果我的代码做得不好,请纠正我。
答案 0 :(得分:1)
解构是一个JavaScript表达式,可以将数组中的值解压缩为不同的变量。也就是说,我们可以从数组和对象中提取数据并将其分配给变量。
[user, change_log, new_value, old_value] =
[user, change_log, new_value, old_value].map(res=> res.replace(/'/g, "\\'"));
答案 1 :(得分:1)
一种选择是使用键名数组,每个键名.replace
并创建一个对象而不是4个独立变量:
const vals = ['user', 'change_log', 'new_value', 'old_value']
.reduce((a, prop) => {
a[prop] = req.query[prop].replace(/'/g, "\\'");
return a;
}, {});
// then, eg, reference vals.user
如果您需要多个独立变量,那么您的代码将需要花些时间-解构时将其全部列出,并在遍历属性时将其全部列出:
const [user, change_log, new_value, old_value] = ['user', 'change_log', 'new_value', 'old_value']
.map(prop => req.query[prop].replace(/'/g, "\\'"));
答案 2 :(得分:1)
您可以根据值创建一个数组,并在其上使用map
。使用Destructuring Assignment without declaration:
let { user, change_log, new_value, old_value } = req.query;
[user, change_log, new_value, old_value] =
[user, change_log, new_value, old_value].map(a => a.replace(/'/g, "\\'"))
注意:上一行的末尾必须为;
。否则,它将把[]
视为req.query
的括号符号。像这样:
req.query[user, change_log, new_value, old_value]
答案 3 :(得分:0)
您可以通过使用数组来缩短它
let { user, change_log, new_value, old_value } = req.query;
[user, change_log, new_value, old_value] =
[user, change_log, new_value, old_value].map(str => str.replace(/'/g, "\\'"));
或以某种方式。但是最好创建一个可以替换并使用的函数。