快速将 js 数组表单字段转换为字符串字段名称



在Express js中,我想发布数组表单字段,但它转换为字符串。

例 : HTML 表单

<form>
<input name="mobile" value="99999999999" />
<input name="name[]" value="apple" />
<input name="name[]" value="mango" />
</form>

服务器端

我得到了

{
mobile: "99999999999",
'name[0]': "apple",
'name[1]': "mango"
}

我想要不带单引号的键名。这仅适用于数组字段

{
mobile: "99999999999",
name[0]: "apple",
name[1]: "mango"
}

任何人都可以指导我如何解决它。我尝试了很多,但没有成功。

对于bodyParser.urlencoded,如果将扩展选项设置为 true,则 bodyParser 中间件会将 format 属性 [nestedProperty] 的属性名称解释为:

{ property: nestedPropert: $value }

只需确保像这样初始化中间件:

app.use(bodyParser.urlencoded({ extended: true });

通过上述更改,您应该能够在表单提交时获取对象

根据评论,这是实现所需结果的解决方法:

我们将从对象中获取键,并检查哪个键是数组键之一。

这不是推荐的方法,而是一种解决方法。这可能不可读,您可能不想在生产环境中使用它。

var obj = {
mobile: "1234",
"name[0]": "one",
"name[1]": "two",
"name[2]": "three",
"teezNameArr[0]": "xx0",
"teezNameArr[1]": "xx1",
"par[0]": "par-one",
"par[1]": "par-something"
};
var arrayFields = ["name", "teezNameArr", "par"];
var regexString = `^(${arrayFields.join("|")})\[\d+\]`;
var regex = new RegExp(regexString);
var newObj = Object.keys(obj)
.filter(aKey => regex.test(aKey))
.reduce((combinedObj, aKey) => {
var keyName = aKey.match(regex)[1];
if (!combinedObj[keyName]) {
combinedObj[keyName] = [];
}
combinedObj[keyName].push(obj[aKey]);
return combinedObj;
}, {});
newObj.mobile = obj.mobile;
console.log(newObj);

最新更新