我需要创建像这样的对象参数
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]
}];
我在array1中有6个数组的所有名称参数,在另一个数组中有所有数据参数。
使用我拥有的数组
是否可以选择构建对象作为我的上述要求我的阵列:
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 :(得分: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:
答案 1 :(得分: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];
等方式访问该对象,并在需要时迭代该对象。
答案 2 :(得分: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")
});
}
});
答案 3 :(得分:0)
$.map()
是一种干净,富有表现力的方式:
var sample_data = $.map(name_array, function(type) {
return {
name: type,
data: window[type + '_data']
};
});
无论您使用for-loop还是$.map()
(也是引擎盖下的for-loop),区分使用window[string]
和eval(string)
都很重要。构建一个用作窗口密钥的字符串不与使用eval相同,并且不共享其漏洞。
例如,window['alert("doevil")']
无害地返回undefined。
答案 4 :(得分:0)
您可以使用jQuery.map获得更短的代码。
var sample_data = $.map(name_array, function(value, index) {
return {name: value, data: eval(value + '_data')};
});