如何在Javascript中动态命名数组?

时间:2010-07-20 16:56:03

标签: javascript jquery arrays

我正在使用jQuery和JSON从数据库中提取数据。数据库的每一行都是不同的产品,每个产品都有许多与之相关的属性。

我在js中尝试做的是为包含所有产品属性的每个产品创建一个命名数组。我知道如何从JSON中提取数据。我知道如何构造数组。

我不知道如何动态创建数组名称。有人可以帮助我吗?

我试图根据数据库中的字段命名数组。在我现有和工作脚本的结构中,它被引用为data.cssid。我想使用data.cssid的值作为数组的名称,然后填充数组。

$.getJSON("products.php",function(data){
    $.each(data.products, function(i,data){
        var data.cssid = new Array();
        data.cssid[0] = data.productid;
        ...
        etc
    });
});

我知道上面的代码是完全错误的,但它说明了这个想法。在我声明“var data.cssid”的地方,我想使用data.cssid的实际值作为新数组的名称。

编辑:

我已经尝试过这里提到的方法(eval除外)。代码如下,除了我正在使用Object构造函数之外,与我原来的帖子没有什么不同。

$(document).ready(function(){
$.getJSON("productscript.php",function(data){
    $.each(data.products, function(i,data){
        var arrayName = data.cssid;
        obj[arrayName] = new Array();
        obj[arrayName][0] = data.productid;
        obj[arrayName][1] = data.productname;
        obj[arrayName][2] = data.cssid;
        obj[arrayName][3] = data.benefits;
        alert(obj[arrayName]); //WORKS
        alert(obj.shoe); //WORKS WHEN arrayName = shoe, otherwise undefined
    });
});
});

非特定obj [arrayName]的警报可以正常运行并显示数组的所有辉煌。 但是,当我尝试通过名称alert(obj.shoe)访问特定数组时,它仅在arrayName = shoe时有效。下一次迭代失败,无法在此函数之外访问它。

我希望这有助于澄清问题以及如何解决问题。我非常感谢所有的投入,并且我正在尝试你们所建议的一切。

进展(解决方案):

$(document).ready(function(){
$.getJSON("productscript.php",function(data){
    $.each(data.products, function(i,data){
        var arrayName = data.cssid;
        window[arrayName] = new Array();
        var arr = window[data.cssid];
        arr[0] = data.productid;
        arr[1] = data.productname;
        arr[2] = data.cssid;
        arr[3] = data.benefits;
        alert(window[arrayName]); //WORKS
        alert(arrayName); //WORKS
        alert(shoe); //WORKS

    });
});
});
function showAlert() {
    alert(shoe); //WORKS when activated by button click
}

感谢大家的投入。

3 个答案:

答案 0 :(得分:7)

你还希望数组在data对象上吗?

data[data.cssid] = new Array();

否则,您可以将其分配给任何其他对象。将其分配给window对象,将使其全局可用

window[data.cssid] = new Array();

...如果data.cssid的值为"abc",那么您可以像这样访问它

abc[0] = data.productid;

答案 1 :(得分:0)

不可能。 PHP有“变量变量”; Javascript没有。

但是,您可以将数组分配给现存对象:

var obj = {};
var name = 'foo';
obj[name] = 1;

alert(obj.foo) // alerts "1"

老实说,不知道为什么你还需要这种能力。你能发布更多代码吗?如果上述方法没有帮助,可能会有一个不错的解决方法。

答案 2 :(得分:0)

您可以按名称在对象上设置属性,如下所示:

var obj = {};  //Or, new Object()
obj[data.cssid] = new Array();

但是,如果你只是制作一个局部变量,那就没有意义了;你可以简单地命名数组newData(或类似的东西),因为你一次只能处理一个数组。