在jQuery函数中提取数组

时间:2017-01-15 23:34:51

标签: javascript jquery arrays

我目前正在使用这个JS Lib https://github.com/v-v-vishnevskiy/timeslider并创建一些不同的时间表图表。

我想插入" init_cells"的信息。以通用的方式让我不必关心有多少个对象(我希望这个术语是正确的)在数组中。

参考演示,有一个示例代码:

$('#slider123').TimeSlider({
    start_timestamp: current_time - 3600 * 12 * 1000,
    init_cells: [
      {
        '_id': 'c1',
        'start': (current_time - (3600 * 5.4 * 1000) + 1234),
        'stop': current_time - 3600 * 3.2 * 1000,
        'style': {
            'background-color': '#76C4FF'
        }
      },
      {
        '_id': 'c2',
        'start': (current_time - (3600 * 2.1 * 1000))
      }
    ]
});

这就像是两个对象的JSON数组一样?!

我在此期间试图将每个对象存储在一个集中的数组中。

var str1 = [{
      '_id':'c1','start':tV1Start,'stop':tV1End,'style':{'background-color':'#76C4FF'}}];
var str2 = [{
      '_id':'c2','start':tV1Start2,'stop':tV1End2,'style':{'background-color':'#76C4FF'}}];
var arr = [];
arr.push(str1);
arr.push(str2);

但是如何在数组中提取所有存储的信息" arr"在init_cells的jQuery函数里面?

此剪辑不起作用

init_cells:arr

但这有效:

init_cells:arr[0]

但是如何通过将变量arr传递给jQuery函数来创建完整的时间轴,而不必关心数组arr中有多少元素?

2 个答案:

答案 0 :(得分:0)

那是因为在你的"集中式阵列中#34;你实际上是存储一个对象数组 - 你实际上需要一个对象数组,而不需要额外的嵌套。 arr是一个数组,而不是连接str1str2,而是将它们推入arr

因此,您的代码将生成一个无法识别的错误结构:

  • 数组(这是你的arr
    • 数组(这是你的str1
      • 对象
    • 数组(这是你的str2
      • 对象

要解决此问题,请使用.concat()代替.push()

var arr = [].concat(str1).concat(str2);

然后,这将生成以下结构,这是您需要的:

  • 数组(这是你的arr
    • 对象
    • 对象

答案 1 :(得分:0)

每个单独的对象都有一个额外的包装数组

从每个中删除外部[]

var str1 = {'_id':'c1','start':tV1Start,'stop':tV1End,'style':{'background-color':'#76C4FF'}};

如果您将所有这些存储在数据库中并从数据库返回完整数组,那么您需要做的就是:

$.getJSON('/path/to/data', function(responseData){
   $('#slider123').TimeSlider({
         start_timestamp: current_time - 3600 * 12 * 1000,
         init_cells: responseData // pass response data array directly as property value
   });    
});