Преобразовать поле формы массива js в имя поля - PullRequest
0 голосов
/ 31 августа 2018

В экспрессе 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"
}

Любой может подсказать мне, как я могу это решить. Я очень старался, но не добился успеха.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Согласно комментариям, вот обходной путь для достижения желаемого результата:

Мы получим ключи от объекта и проверим, какой ключ является одним из ключей массива.

Это не рекомендуемый подход, а обходной путь. Это может быть недоступно для чтения, и вы можете не использовать его в Production.

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);
0 голосов
/ 31 августа 2018

Для bodyParser.urlencoded, если для расширенной опции задано значение true, имена атрибутов свойства формата [nestedProperty] будут интерпретироваться промежуточным программным обеспечением bodyParser как:

{ property: nestedPropert: $value }

Только не забудьте инициализировать промежуточное ПО следующим образом:

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

С указанными выше изменениями вы сможете получить объект при отправке формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...