如何在javascript或jquery中使用对象

时间:2011-03-11 04:39:23

标签: 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]
                    }];

我在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中使用这些数组创建对象。

5 个答案:

答案 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:

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

答案 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")
      });
  } 


});

http://jsfiddle.net/tbErD/

答案 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')};
});