Js массив в массив строк разных типов

0

Я пытаюсь иметь форму, которая позволяет отправить 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.

  • 1
    Решение этой проблемы выглядит так же просто, как определение, начинается ли строка и заканчивается ли она скобками, затем разделяет строку запятыми, а затем выводит результирующий массив строк с кавычками.
  • 0
    собираюсь попробовать что-то подобное
Теги:
arrays

3 ответа

0
Лучший ответ

Вы можете использовать эту функцию 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>

Обратите внимание, что пользователь может дополнительно ввести кавычки. Будут ли они это делать или нет, результат будет таким же. Он работает одинаково для сингулярных значений: если кавычки обернуты вокруг ввода, они дают ту же строку, что и без.

  • 0
    Каким должен быть ввод в вашем примере, чтобы получить ["1", "2", "3"] в качестве вывода? кажется, я не совсем понимаю
  • 0
    Я вижу, вы никогда не хотите получить тип номера. Я обновил свой ответ - это на самом деле упрощает.
Показать ещё 2 комментария
0

Вы можете использовать функцию map:

var arr = [1,2,3];
arr = arr.map(function(el){return el.toString()});
//The output array will be ["1","2","3"]

и для [foo, bar] Я думаю, вы не можете его преобразовать, потому что это переменная, и вы получите ее значение вместо имени.

Я хочу, чтобы это помогло вам.

0

Вместо ввода пользователем [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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню