Javascript:使用变量构建数组

时间:2010-10-27 10:09:23

标签: javascript arrays variables multidimensional-array

是否可以获取变量的内容并将其粘贴到这样的数组中(我试图无济于事):

首先,我从数据库中获取这些值,并将php表单用于隐藏输入:

{value: '1', name: 'name1'},{value: '2', name: 'name2'}

然后用javascript收集

document.getElementById("myelement").value

然后输入值

var meval = document.getElementById("myelement").value;

然后我尝试像这样构建数据:

var data = {items: [meval]};

如果我这样做

var data = {items: [{value: '1', name: 'name1'},{value: '2', name: 'name2'}]};

它有效,但不是变量的初始方式。我必须建立这样的原始数据。

5 个答案:

答案 0 :(得分:2)

如果您使用字符串,则可以使用eval() - 但它有点顽皮,因为它引入了安全性和安全性。流动问题。

var meval =“[{value:'1',name:'name1'},{value:'2',name:'name2'}]”;

var data = eval(meval);

答案 1 :(得分:2)

eval()是邪恶的!请改用JSON.parse()

var data = {items: JSON.parse('['+meval+']')};

如果您的网站上包含jQuery,则可以$.parseJSON()在旧版浏览器上运行效果更佳。

答案 2 :(得分:2)

Eric是对的,你通常比使用任意JavaScript文字更好地使用JSON。目前,您的文字不是有效的JSON,因为它不使用双引号属性名称和字符串值。使用json_encode获取与JSON兼容的文字语法。

eval()不可用时,您可以像其他答案一样回退到JSON.parse,但是您需要使用额外的括号来确保eval知道前导{ 1}}表示对象文字,而不是语句。

<?php
    function js($s) { // shortcut to save some typing
        echo json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT|JSON_HEX_APOS);
    }

    $data= array(name=>$row['name'], value=>$row['value']);
?>
<input type="hidden" id="data" value="<?php js($data); ?>"/>

<script type="text/javascript">
    var json= document.getElementById('data').value;
    var data= 'JSON' in window? JSON.parse(json) : eval('('+json+')');
</script>

实际上JSON_HEX函数中的js选项允许以在HTML属性或<script>块中同样有效的方式输出文字,因此您确实可以省略隐藏的输入,只是说:

<script type="text/javascript">
    var data= <?php js($data); ?>;
</script>

答案 3 :(得分:1)

您需要评估该变量以将其内容转换为数据结构:

var data = {items: [eval(meval)]};

答案 4 :(得分:0)

将这些项目放入以下格式的隐藏输入中:

"name1"."|"."name2"."|"."name3"... and so on

然后在JS:

var list = document.getElementById("yourelement").value;
var arrayOfStuff = list.split("|");

现在你的JS数组看起来像这样:

array() {
    [0] => "Name1"
    [1] => "Name2"
    [2] => "Name3"
    ... and so on
}