2017-01-01 29 views
0

我想要一个允许从窗体发送json的窗体。Js数组到不同类型的字符串数组

我的一个输入的形式应为["1","2","3"]["foo","bar"] 我有我的用户传递数组中的单个字段从形式问题的数组。

我想我的用户能够输入(HTML)[1,2,3]并将它转换为["1","2","3"][foo,bar]和必须转换为[“foo”的,“酒吧”]。

json.Stringify在这种情况下显然不起作用。

我很难做到这一点我不知道输入字段将是一个数组或字符串或数字。

目前我储存我表单的内容中的对象在我的控制器,但显然输入查询时[1,2,3]我得到“[1,2,3]”,并输入查询["1","2","3"]时数据传递我得到[\"1\",\"2\",\"3\"]

是否有自动执行该操作的工具/功能?

注意: -1字段NEEDS是一个数组的输入是我事先不知道数组的类型,也没有它将有的项目数。 - 我正在使用angular,但这更多的是我相信的一个js问题。

+1

解决这个似乎检测字符串是否开始,并且以托架结尾,则用逗号分割字符串,然后输出与引号所得字符串数组一样简单。 – mattsven

+0

要去尝试类似的东西 – EwoG

回答

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”]应该是什么输入?似乎我不太明白 – EwoG

+0

我明白了,你永远不想得到数字类型。我更新了我的答案 - 事实上它更简单。 – trincot

+0

完美!非常感谢 – EwoG

0

您可以使用map功能:

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

和[富,巴]我想是因为它是一个变量,你会得到它的价值,而不是它的名字,你无法将它转换。

我希望能帮到你。

0

而不是用户输入[1,2,3],通知用户输入1,2,3foo,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>