我试图拥有一个允许从表单发送json的表单。
我的一个输入应该是["1","2","3"]
或["foo","bar"]
形式的数组
我的用户在表单的SINGLE字段中传递数组时遇到了问题。
我希望我的用户能够输入(html)[1,2,3]
并将其转换为["1","2","3"]
或[foo,bar]
,并且必须转换为[" foo&#34 ;,"杆"。]
json.Stringify在这种情况下显然不起作用。
我很难做到这一点我事先并不知道输入字段是数组,字符串还是数字。
我目前正在将我的表单内容存储在我的控制器中的一个对象中,但显然在输入[1,2,3]时,我得到了#1,2; [1,2,3]"当输入["1","2","3"]
时,我传递的数据为[\"1\",\"2\",\"3\"]
是否有自动执行此操作的工具/功能?
注意: - 作为阵列的1场NEEDS的输入是我事先不知道阵列的类型以及它将具有的项目数量。 - 我使用角度,但我认为这更像是一个js问题。
答案 0 :(得分: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>
&#13;
请注意,用户可以选择键入引号。无论他们是否这样做,结果都是一样的。对于奇异值,它的作用是相同的:如果引号包含在输入中,它们会给出与没有相同的字符串。
答案 1 :(得分: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]我觉得你不能转换它,因为它是一个变量,你会得到它的价值而不是它的名字。
我希望这可以帮到你。
答案 2 :(得分: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>