Учитывая строку JS
let string = 'language.0.name'
как я могу преобразовать строку в нотацию ключа formData, чтобы я мог пойти
'language[0][name]'
Я пробую это, но мне нужен короткий код с регулярным выражением
let temp = '';
_.forEach(key.split(/[.]/), (i, k) => {
temp += k === 0 ? i : `[${i}]`;
});
@charlietfl Да, вы правы, я обновил свои вопросы. Я хочу отправить ajax-запрос с почтовым методом на свою серверную часть. мой ввод имеет несколько данных.. `языки [{уровень: 5, имя: 'английский'}, {уровень: 5, имя: 'английский'}] `
Почему бы не отправить в формате JSON, если у вас уже есть структурированные данные?
Вот моя плохая реализация, которую я не удосужился оптимизировать:
const string = "language.0.name";
function toKeyNotation(s: string) {
const string = s;
const m = string.match(/.\d./g);
const n = m.map((s) => s.slice(1, 2));
const a = string.split(/.\d./g);
let r = "";
for (let i = 0; i < m.length; i++) {
const newString = `[${n[i]}]`;
r += a[i];
r += newString;
}
r += a[a.length - 1];
return r;
}
console.info(toKeyNotation(string)); // returns 'language[0]name'
Извините, я обновил свой вопрос. Можно ли использовать только регулярное выражение?
в этом случае приведенных выше ответов будет достаточно ^_^
Следующая функция поможет вам со строкой es6 для формирования данных
function filterData(str) {
str = str.split(".");
let str1 = "";
str.forEach((element) => {
str1 === "" ? (str1 = element) : (str1 += "[" + element + "]");
});
console.info(str1);
}
<!DOCTYPE html>
<html>
<head></head>
<body>
<input type = "text" onkeydown = "filterData(this.value)" />
</body>
</html>
Можно сделать это с помощью простых split()
и reduce()
let strings = ['language.0.name', 'language.0', 'language'];
// parse function
const parseFormStr = (s) => s.split('.').reduce((a, c) => a + `[${c}]`);
// test loop
strings.forEach(s => console.info([s, ' => ', parseFormStr(s)].join('')));
Спасибо, чувак, теперь мы можем отправлять JSON вот так. JSON.stringify($("#myForm").serializeArray()) но невозможно ли это в vuejs? и таким образом я могу загрузить изображение?
Вы должны использовать FormData для отправки изображения. const data = new FormData(formElement)
и обязательно установите соответствующий заголовок типа многокомпонентного контента. Не нужен какой-либо из этого строкового кода, когда вы это делаете
Для данных, закодированных в форме, вы бы не хотели
'language[0][name]'
? Каков ваш фактический вариант использования? Кроме того, что вы пробовали?