你如何构造JavaScript数组,它可以类似于给定的例子?

时间:2012-01-16 22:07:50

标签: javascript jquery google-maps

我必须使用一些数据制作这个addRows方法,这需要按照构造。

data.addRows([
    ['UK', 10700,100],
    ['USA', -15400,1]    
  ]);

但是我只有这样的数据来了,我怎么能用上面的方法呢?

  var custom = new Array();
  success : function(msg)
  {
    /* Make this structure
    [
     ['UK', 10700,100],
     ['USA', -15400,1]    
    ]    
    */
    var total = parseInt(msg.total);
    for(i=0; i < total; i++ ) {
      custom[0][i][0] = msg.rows[i].land;
      custom[0][i][1] = msg.rows[i].id;
      custom[0][i][2] = msg.rows[i].id;
    }        
  }
  data.addRows(custom); // does not work

错误:(尝试了3个示例全部返回相同)

Uncaught TypeError: Cannot call method 'toString' of null
Uncaught TypeError: Cannot read property 'land' of undefined

3 个答案:

答案 0 :(得分:3)

splice方法可用于将元素添加到数组

    var arr = ["a", "b"];

    var newItems = ["c", "d", "e"];

    [].splice.apply(arr, [arr.length, 0].concat(newItems));

    console.log(arr.join()); //a,b,c,d,e
    console.log(arr.length); //5

或者你可以在Array的原型中添加这样的东西:

Array.prototype.addRows = function(arr) {
    var self = this;
    arr.forEach(function(val) {
        self.push(val);
    });
}

var arr = ["a", "b"];

arr.addRows(["c", "d", "e"]);

for (var i = 0; i < arr.length; i++)
    console.log(arr[i]);

DEMO

答案 1 :(得分:1)

您可以使用此方法 http://www.w3schools.com/jsref/jsref_concat_array.asp

最初假设

data = [
     ['UK', 10700,100],
     ['USA', -15400,1]    
    ]  ;

成功处理程序,

success : function(msg)
{
   /* Make this structure
   [
     ['UK', 10700,100],
     ['USA', -15400,1]    
    ]    
   */

    var custom = [];

    var total = parseInt(msg.total);
    for(i=0; i < total; i++ ) {
       custom[i] = [msg.rows[i].land, msg.rows[i].id1, msg.rows[i].id2];
    }  

    data = data.concat(custom);

 }

答案 2 :(得分:1)

尝试使用push方法:

  // `[]` is the same as `new Array`, but slightly faster
  var custom = [];
  var success = function(msg)
  {
    var total = parseInt(msg.total);
    for(i=0; i < total; i++ ) {
      var msgRow = msg.rows[i];
      var customRow = [msgRow.land, msgRow.id, msgRow.id];
      // The push method adds a new row to your array
      custom.push(msgRow);
    }        
  };
  data.addRows(custom);