Я пытаюсь иметь форму, которая позволяет отправить json из формы.
Один из моих входных данных должен быть массивом формы ["1","2","3"]
или ["foo","bar"]
У меня проблема с моим пользователем, передающим массив в поле SINGLE из формы.
Я хочу, чтобы мой пользователь мог ввести (html) [1,2,3]
и преобразовать его в ["1","2","3"]
или [foo,bar]
и преобразовать его в [ "Foo", "бар"].
json.Stringify явно не работает в этом случае.
У меня возникают трудности с этим, поскольку я не знаю заранее, что поле ввода будет массивом или строкой или числом.
В настоящее время я сохраняю содержимое своей формы в объекте в моем контроллере, но, очевидно, при вводе [1,2,3] я получаю "[1,2,3]" и при вводе ["1","2","3"]
что данные переданы, я получаю [\"1\",\"2\",\"3\"]
Есть ли инструмент/функция, чтобы сделать это автоматически?
Примечание: -the ввод 1-го поля NEEDS для массива - я заранее не знаю тип массива и количество элементов, которые он будет иметь. - Я использую угловой, но я больше уверен в проблеме js.
Вы можете использовать эту функцию cast
:
function cast(s) {
if (s.match(/^\s*\[.*\]\s*$/)) { // array notation
return s.trim().replace(/^\[|\]$/g, '').split(',').map(cast);
}
// remove wrapping quotes if present
return s.trim().replace(/^'(.*)'$|^"(.*)"$/g, '$1$2');
}
// I/O for demo
document.querySelector('input').addEventListener('input', function () {
var s = cast(this.value);
document.querySelector('span').textContent = JSON.stringify(s);
});
Your input: <input><br>
Output JSON: <span></span>
Обратите внимание, что пользователь может дополнительно ввести кавычки. Будут ли они это делать или нет, результат будет таким же. Он работает одинаково для сингулярных значений: если кавычки обернуты вокруг ввода, они дают ту же строку, что и без.
Вы можете использовать функцию map
:
var arr = [1,2,3];
arr = arr.map(function(el){return el.toString()});
//The output array will be ["1","2","3"]
и для [foo, bar] Я думаю, вы не можете его преобразовать, потому что это переменная, и вы получите ее значение вместо имени.
Я хочу, чтобы это помогло вам.
Вместо ввода пользователем [1,2,3]
, уведомите пользователя о вводе 1,2,3
или foo,bar
.
let arr = [];
for (let input of document.querySelectorAll("form input")) {
arr.push(input.value.split(","));
}
console.log(
JSON.stringify(arr[0])
, JSON.stringify(arr[1])
)
<form>
<label>input number,number,number:</label>
<input placeholder="input number,number,number" value="1,2,3"/>
<br>
<label>input word,word,word:</label>
<input placeholder="input word,word,word" value="foo, bar"/>
</form>