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

Duf*_*lan 4 javascript arrays jquery

我使用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
    });
});
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码是完全错误的,但它说明了这个想法.在我声明"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
    });
});
});
Run Code Online (Sandbox Code Playgroud)

非特定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
}
Run Code Online (Sandbox Code Playgroud)

感谢大家的投入.

Dav*_*und 7

你还想让数组在data对象上吗?

data[data.cssid] = new Array();
Run Code Online (Sandbox Code Playgroud)

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

window[data.cssid] = new Array();
Run Code Online (Sandbox Code Playgroud)

......那么,如果值data.cssid"abc",那么你可以像这样访问

abc[0] = data.productid;
Run Code Online (Sandbox Code Playgroud)