如何简化这些多重分配?

How can these multiple assignments be simplified?

提问人:jjpp43 提问时间:1/7/2021 最后编辑:Sebastian Simonjjpp43 更新时间:1/7/2021 访问量:70

问:

此代码可以简化为单个赋值吗?这三个变量是我从前端接收的输入。我在Node.js中使用该模块。xss

var clientname = xss(req.body.clientName, {
    whiteList: [],
    stripIgnoreTag: true,
    stripIgnoreTagBody: ['script']
});
var clientnumber = xss(req.body.clientNumber, {
    whiteList: [],
    stripIgnoreTag: true,
    stripIgnoreTagBody: ['script']
});
var clientaddress = xss(req.body.clientAddress, {
    whiteList: [],
    stripIgnoreTag: true,
    stripIgnoreTagBody: ['script']
});
JavaScript node.js 多重赋值

评论

0赞 Sebastian Simon 1/7/2021
您运行的是哪个Node.js版本?

答:

1赞 Sebastian Simon 1/7/2021 #1

解构和迭代方法对此很有用:

const xssOptions = {
    whiteList: [],
    stripIgnoreTag: true,
    stripIgnoreTagBody: [
      "script"
    ]
  },
  [
    clientName,
    clientNumber,
    clientAddress
  ] = [
      "clientName",
      "clientNumber",
      "clientAddress"
    ].map((property) => xss(req.body[property], xssOptions));

在整个赋值过程中唯一会更改的是 之后的属性名称,因此将其作为参数传递给 Array 的调用,将每个属性名称映射到它们各自的调用。调用返回后,其返回值将以相同的顺序存储在数组中,然后解构为三个单独的变量。req.bodymapxssxss

或者,您可以使用一个对象将它们组合在一起:

const xssOptions = {
    whiteList: [],
    stripIgnoreTag: true,
    stripIgnoreTagBody: [
      "script"
    ]
  },
  myXSSObjects = Object.fromEntries([
      "clientName",
      "clientNumber",
      "clientAddress"
    ].map((property) => [
      property,
      xss(req.body[property], xssOptions)
    ]));

console.log(myXSSObjects.clientName);

其他注意事项:

  1. 使用 const 而不是 var
  2. 按照惯例,JavaScript 标识符使用 ,而不是 。camelCasealllowercase
  3. 将用作第二个参数的对象缓存到另一个变量中,以提高可重用性和效率。xss