Динамически создать двумерный массив Javascript - PullRequest
2 голосов
/ 11 марта 2012

Может ли кто-нибудь показать мне javascript, который мне нужен для динамического создания двумерного массива Javascript, как показано ниже?

требуемое содержимое массива:

[["test1","test2","test3","test4","test5"],["test6","test7","test8","test9","test10"]]

текущий недопустимый вывод из предупреждения (outterArray):

"test6","test7","test8","test9","test10","test6","test7","test8","test9","test10"

код JavaScript:

var outterArray = new Array();
var innerArray = new Array();
var outterCount=0;
$something.each(function () { 
   var innerCount = 0;//should reset the inner array and overwrite previous values?
   $something.somethingElse.each(function () {
        innerArray[innerCount] = $(this).text();
        innerCount++;
   }
   outterArray[outterCount] = innerArray;
   outterCount++;
}
alert(outterArray);

Ответы [ 6 ]

7 голосов
/ 11 марта 2012

Это довольно урезано, просто установите вложенную петлю:

var count = 1;
var twoDimensionalArray =[];

for (var i=0;i<2;i++)
{
  var data = [];
  for (var j=0;j<5;j++)
  {
    data.push("Test" + count);
    count++;
  }

  twoDimensionalArray.push(data);

}
5 голосов
/ 11 марта 2012

Звучит так, будто вы хотите отобразить массив текста для каждого элемента $something во внешний зубчатый массив.Если это так, попробуйте следующее

var outterArray = [];
$something.each(function () { 
  var innerArray = [];
  $(this).somethingElse.each(function () {
     innerArray.push($(this).text());
  });
  outterArray.push(innerArray);
});

alert(outterArray);
2 голосов
/ 21 мая 2014

Более гибкий подход заключается в использовании необработанных объектов, они используются аналогично словарям.Динамически расходные материалы и дополнительные параметры для определения индекса (в виде строки).

Вот вам пример:

var myArray = {};
myArray[12]="banana";
myArray["superman"]=123;
myArray[13]={}; //here another dimension is created
myArray[13][55]="This is the second dimension";
1 голос
/ 11 марта 2012

[ПОСМОТРЕТЬ В ДЕЙСТВИИ С JSFIDDLE] Если эта переменная $thing является поиском jQuery, вы можете использовать функцию .map (), например:

var outterArray = [];

var outterArray = $('.something').map(function() {

    // find .somethingElse inside current element

    return [$(this).find('.somethingElse').map(function() {
        return $(this).text();
    }).get()]; // return an array of texts ['text1', 'text2','text3']

}).get(); // use .get() to get values only, as .map() normally returns jQuery wrapped array

// notice that this alert text1,text2,text3,text4,text5,text6 
alert(outterArray);​ 

// even when the array is two dimensional as you can do this: 
alert(outterArray[0]); 
alert(outterArray[1]);

HTML:

<div class="something">
    <span class="somethingElse">test1</span>
    <span class="somethingElse">test2</span>        
    <span class="somethingElse">test3</span>           
</div>
<div class="something">
    <span class="somethingElse">test4</span>
    <span class="somethingElse">test5</span>        
    <span class="somethingElse">test6</span>           
</div>

Здесь вы можете видеть, как он работает в jsFiddle с ожидаемым результатом: http://jsfiddle.net/gPKKG/2/

1 голос
/ 11 марта 2012

Вам не нужно самостоятельно следить за длиной массива; среда выполнения поддерживает свойство ".length" для вас. Кроме того, есть метод .push() для добавления элемента в конец массива.

    // ...
    innerArray.push($(this).text());
  // ...
  outerArray.push(innerArray);

Чтобы создать новый массив, просто используйте []:

innerArray = []; // new array for this row

Также "внешний" имеет только одну "т": -)

0 голосов
/ 01 октября 2014

У меня недавно была похожая проблема, когда я работал с электронной таблицей Google, и я нашел ответ, аналогичный ответу BrianV:

  // 1st nest to handle number of columns I'm formatting, 2nd nest to build 2d array   
  for (var i = 1; i <= 2; i++) {
    tmpRange = sheet.getRange(Row + 1, Col + i, numCells2Format); // pass/fail cells
    var d2Arr = [];
    for (var j = 0; j < numCells2Format; j++) {
      // 1st column of cells I'm formatting
      if ( 1 == i) {
        d2Arr[j] = ["center"];
      // 2nd column of cells I'm formatting
      } else if ( 2 == i ) {
        d2Arr[j] = ["left"];
      }
    }
    tmpRange.setHorizontalAlignments( d2Arr );   
  }

Так что, в основном, мне пришлось выполнить задание d2Arr[index]=["some string"], чтобыпостроить многомерный массив, который я искал.Поскольку число ячеек, которые я хотел отформатировать, может меняться от листа к листу, я хотел, чтобы оно было обобщенным.В случае, когда я работал, требовался массив из 15 измерений.Присвоение 1-D массива элементам в 1-D массиве привело к созданию необходимого мне 15-D массива.

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