如何从字符串“[1,12,2,3,4]”中获取数组?

时间:2012-01-21 17:44:11

标签: javascript

在我的JSP中,隐藏的变量值显示如下。

<input type="hidden" name="" value="[1, 12, 2, 3, 4]" id="rollNumber"/> 

当我尝试通过document.getElementById在javascript函数中获取隐藏变量并将其放入数组(rollNo)时,如下所示:

rollNo = document.getElementById("rollNumber").value; 

rollNo值即将[1, 12, 2, 3, 4]

当我尝试迭代rollNo时,它给我的元素为:

[
1
,
space
1
2
, 
space  etc... elements

我只需要像'1 12 2 3 4'

这样的元素

8 个答案:

答案 0 :(得分:4)

您需要解析返回到javascript数组的字符串值。您可以使用JSON.parse方法:

var rollNo = document.getElementById("rollNumber").value; 
var values = JSON.parse(rollNo);
for (var i = 0; i < values.length; i++) {
    var item = values[i];
}

备注:JSON.parse方法内置于现代浏览器中,但如果您需要支持旧版浏览器,则可以在页面中加入json2.js脚本。

答案 1 :(得分:3)

  • 您的输入字段的字符串值为"[1, 12, 2, 3, 4]"

  • 仅仅因为数组可以被字符串化看起来相似并不意味着这个字符串神奇地是一个数组。


您可以使用eval将该字符串化的Javascript文字转换为真实对象,但我强烈建议您不要这样做。


相反,找到一种 new 方式来表示数据,并将其解析为数组。

也许,使用Javascript的字符串函数:

<input type="hidden" name="" value="1,12,2,3,4" id="rollNumber"/> 

然后:

rollNo = document.getElementById("rollNumber").value.split(/,/);

Live demo

Demonstration of technique

很难从控制台输出(它总是必须是字符串,以便你作为人类,可以读取它)告诉,但这是两个非常不同的东西。


或者,如果您需要保持input字段值的方式,您可以使用JSON.parse将其解析为JSON(尽管您必须跳过箍以使其可用于所有但是最新的浏览器。)

答案 2 :(得分:1)

你可以通过使用一个简单的正则表达式

来做到这一点
var text = document.getElementById("rollNumber").value; 
var pattern = /\d+/g // matches all instances of one or more digits
var result = text.match(pattern)

简单而优雅,适用于所有包含数字的字符串,带有任何分隔符

答案 3 :(得分:0)

值是字符串,而不是对象。你需要转换它。我会做这样的事情。

<input type="hidden" name="" value="1,12,2,3,4" id="rollNumber"/> 

rollNo = document.getElementById("rollNumber").value;
var myArray = rollNo.split(',');

答案 4 :(得分:0)

你是如何迭代它的?

请记住,document.getElementById('')。value将返回一个字符串。

试试这个

<input type="hidden" name="" value="1,12,2,3,4" id="rollNumber"/> 

rollNo = document.getElementById("rollNumber").value.split(',');
for(i=0;i<rollNo.length;i++){
console.log(rollNo[i]);
}

答案 5 :(得分:0)

它看起来像JSON字符串,你必须使用eval解析它。您可以使用以下代码检索每个数字

var rollNo = document.getElementById("rollNumber").value;
var rollNoArray = eval(rollNo);
for(var i=0;i<rollNoArray .length;i++){
    alert(rollNoArray [i]);
}

答案 6 :(得分:0)

检查此工作演示:Working Demo

<html>
<head>
<body>
<input type="hidden" name="" value="[1, 12, 2, 3, 4]" id="rollNumber"/> 
<script>
rollNo = document.getElementById("rollNumber").value;
var arrayvar=eval(rollNo);
var urstring="";
for (i=0;i<arrayvar.length;i++)
{
    urstring+=arrayvar[i]+" ";
}
document.write(urstring);
</script>
</body>
</html>

答案 7 :(得分:0)

如果您需要坚持使用给定的格式,并且您不想或不能使用JSON.parse,这可能会起到作用:

document.getElementById("rollNumber").value.replace(/[\[\]\s]+/g,'').split(/,/)