2011-03-11 38 views
0

我需要创建对象的参数一些这样的事如何使用对象的JavaScript或jQuery的

sample_data=[{ 
         name: 'new', 
         data: [1, 0, 2, 8, 1] 
        }, { 
         name: 'open', 
         data: [1, 2, 3, 7, 1] 
        },{ 
         name: 'closed', 
         data: [5, 4, 3, 1, 1] 
        },{ 
         name: 'onhold', 
         data: [1, 1, 2, 0, 1] 
        }, { 
         name: 'completed', 
         data: [0, 0, 5, 1, 2] 
        }]; 

我完全6阵列,阵列1的所有名称参数,而在另一个数组的所有数据参数。

是否有任何选项,内置对象作为我的上述要求,使用我有

我的数组的数组:

name_array=Array("new","open","closed","onhold","completed"); 

    new_data=Array(1, 0, 2, 8, 1); 
    open_data=Array(1, 2, 3, 7, 1); 
    closed_data=Array(5, 4, 3, 1, 1); 
    onhold_data=Array(1, 1, 2, 0, 1); 
    completed_data=Array(0, 0, 5, 1, 2); 

帮助我如何使用这些数组来创建对象的JavaScript或jQuery的。

+0

既然有类似的答案,我只是要在这里发布这里作为参考。 http://jsfiddle.net/mkmcdonald/RJSZ9/1/ – 2011-03-11 05:31:40

回答

3

该解决方案假定您的数组对象是全局声明的(在窗口对象上)。通常我不会建议这种类型的事情,但这个工程:

var sampleData = []; 

for (var i = 0; i < name_array.length; i++) { 
    var arrayName = name_array[i]; 
    sampleData.push({ 
     name: arrayName, 
     data: window[arrayName + "_data"] 
    }); 
} 

这里是它的工作一个的jsfiddle:

http://jsfiddle.net/magicaj/HzQvu/

0

这听起来像你应该使用什么是对象。

names = { 
    "new" : Array(1, 0, 2, 8, 1), 
    "open" : Array(1, 2, 3, 7, 1), 
... 
}; 

因此,构建它上面给出的sample_data将是:

names = {}; 
for(var i =0; i<sample_data.length; i ++){ 
    names[sample_data[i].name] = sample_data[i].data; 
} 

然后,您可以访问该对象为names["new"]var which = "new"; names[which];等,如果需要遍历的对象。

0

随着eval()函数...

var name_array=Array("new","open","closed","onhold","completed"); 

var new_data=Array(1, 0, 2, 8, 1); 
    var open_data=Array(1, 2, 3, 7, 1); 
    var closed_data=Array(5, 4, 3, 1, 1); 
    var onhold_data=Array(1, 1, 2, 0, 1); 
    var completed_data=Array(0, 0, 5, 1, 2); 

$(function(){ 

    var combined = []; 
    for(var i = 0;i<name_array.length;i++) 
    { 
     combined.push({ 
      name: name_array[i], 
      data: eval(name_array[i] + "_data") 
     }); 
    } 


}); 

http://jsfiddle.net/tbErD/

0

$.map()是做一个干净的,表达方式:

var sample_data = $.map(name_array, function(type) { 
    return { 
    name: type, 
    data: window[type + '_data'] 
    }; 
}); 

无论您使用一个for循环或$.map()(这也是引擎盖下的for-loop),区分使用window[string]eval(string)。构建一个用作窗口键的字符串是而不是与使用eval相同并且不共享其漏洞。

例如,window['alert("doevil")']无害地返回undefined。

0

您可以使用jQuery.map获得较短的代码。

var sample_data = $.map(name_array, function(value, index) { 
    return {name: value, data: eval(value + '_data')}; 
}); 
相关问题