представьте, что у меня есть Excel-подобная сетка, состоящая из двух частей.
Столбец и список.
Столбец - это столбцы, а список - это полная коллекция всех строк. Я могу получить свой список столбцов с .length и .length в списке, который дает мне количество строк.
Итак, теперь у меня есть x и y.
Я хочу создать из этого объект, который работал бы примерно так:
var = ObjList {
row0 = [],
row1 = [],
row2 = [],
column = [],
};
Проблема в том, что список можно изменять по длине. Единственный способ приблизиться к этому - программно создавать переменные. Вроде так (псевдокод)
//Variables
var itemName
//Get Column Names
for (var j in columns) { //columns is an object/array
var cName =columns[j].getName(); //I have to get the name otherwise cName just returns as ListItem
columnList.push(cName); //Push cName to my own array so I have an array of strings
}
for (var i in listItems) { //Again working with an object array
item = listItems[i] //Creating an easier reference variable
for (var j = 0; j < columnList.length - 1;j++){ //now I have to use the length of the Column array to find out how wide our list is
itemName = item.getValueByName(columnList[j]); //turning the listitem into a string
row(i).push(itemName); //the is the programmatic variable.
}
}
Проблема в том, что я не уверен, где бы объявить переменную. Есть ли у меня другой способ пройти через массив List и сопоставить каждый индекс массива listItems с индексом столбца, который я делаю здесь с помощью getValueByName (columnList [j]).
******************************Редактировать******************* *************
Был запрошен пример, и я вижу, насколько это сбивает с толку. Это касается конкретно сайтов Google.
Я также добавил комментарии к приведенному выше коду.
У нас есть сетка, фактически состоящая из двух частей. Столбец - это объект, поэтому я создаю еще один массив и помещаю имена в массив. Список - это еще один объект. (LI = lineItem)
|Col1|Col2|Col3|Col4|<~~~ Column Object
|LI |LI |LI |LI |<~~~~~~~~~~~~~~~~~~~|
|LI |LI |LI |LI |<~~~~~~~~~~~~~~~~~~~| List Object
|LI |LI |LI |LI |<~~~~~~~~~~~~~~~~~~~|
Я хочу иметь возможность перебирать цикл и разбивать каждую строку на отдельный массив.
Мне удавалось делать это по одному. Но поскольку я хотел бы иметь один массив на строку, а количество строк является динамическим (потому что пользователь может добавлять больше строк), я не понимаю, как я могу это учитывать.
Я хочу, чтобы вся сетка существовала как объект со свойствами строки и свойствами столбца, которые являются массивом. Таким образом, row0 будет row0 [LI1, LI2, LI3, LI4]
Columns[]~~>|Col1|Col2|Col3|Col4| ~~~~~~~|
row0[]~~~~~>|LI1 |LI2 |LI3 |LI4 | ~~~~~~~|
row1[]~~~~~>|LI1 |LI2 |LI3 |LI4 | ~~~~~~~|ObjList
row2[]~~~~~>|LI1 |LI2 |LI3 |LI4 | ~~~~~~~|
Снова ширина сетки
Column.length
и количество строк может быть определено
itemList.length
Итак, я думаю, вопрос в том, могу ли я иметь массив массивов?
Так что я мог бы
//Variables
var itemName;
var masterArray = [];
var midArray = [];
//Get Column Names
for (var j in columns) {
var cName =columns[j].getName();
columnList.push(cName);
}
for (var i in listItems) {
item = listItems[i]
for (var j = 0; j < columnList.length - 1;j++){
itemName = item.getValueByName(columnList[j]);
midArray.push(itemName);
if (midArray > columnLisst.length -1) {
masterArray.push(midArray);
midArray.length = 0;
}
}
}
Хотя это кажется неуклюжим и неправильным.