Как вы строите массив JavaScript, который может быть похож на данный пример? - PullRequest
1 голос
/ 17 января 2012

Я должен сделать этот метод 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 ]

3 голосов
/ 17 января 2012

Метод 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 голос
/ 17 января 2012

Попробуйте использовать метод 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);
1 голос
/ 17 января 2012

Вы можете использовать этот метод 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);

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...