簡體   English   中英

Express js數組表單字段轉換為String字段名稱

[英]Express js array form field converting into String field name

在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中間件會將格式屬性[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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM