возможен ли массив объектов, содержащих массивы? - PullRequest
1 голос
/ 27 ноября 2010

Я пытаюсь запустить слайд-шоу на своей странице, которое рисует из нескольких групп (категорий) изображений, которые включены в слайд-шоу, если установлен определенный флажок (по одному для каждой категории) на странице.Я успешно закодировал это с двумя категориями, но пытаюсь сделать код более легко настраиваемым.У меня была блестящая идея использовать пользовательские объекты вместо массивов.Я полагаю, что этот подход, вероятно, также приблизил бы меня к моей конечной цели использования документа xml в процессе.

Я довольно новичок в объектно-ориентированном программировании, особенно в javascript.Я успешно создал объявление объектов для использования на странице слайд-шоу со следующим кодом:

function picsobj(description,length,indivpicarray){
  this.description=description;
  this.length=length;
  this.indivpicarray=indivpicarray;
}

и в другом месте с помощью следующего кода для создания массива объектов picsobj

for(i=0;i<2;i++){ //change i< integer to number of picture arrays
  picarrays[i]=new picsobj();}

План состоит в том, чтобы использовать свойство description для подписей или описывать элементы на странице, использовать свойство length, чтобы помочь определить, сколько картинок нужно пролистать, и использовать (вот где мой вопрос возникает ...) свойство объекта, называемое indivpicarray.хранить массив имен изображений (длина массива изменится с picsobj на picsobj).Я не знаю, возможно ли это, и если это так, мне нужна помощь с синтаксисом, пожалуйста.Спасибо, что прочитали мой вопрос.опять же, извините, если есть какие-то неправильно используемые слова, я немного n00b и довольно много узнал через "просмотр источника, копирование, вставка, изменение"

Ответы [ 5 ]

3 голосов
/ 27 ноября 2010

и использовать свойство объекта с именем Индивидуальный массив для хранения массива имена изображений.

Это прекрасно. Техника объектов со свойствами, являющимися массивами, довольно распространена. Массивы обрабатываются так же, как и любая другая переменная. Просто добавьте это в ваш конструктор:

function picsobj(description,length,indivpicarray){
  this.description=description;
  this.length=length;
  this.indivpicarray=indivpicarray;
}

imageNameArray = [ "image1.png", "image2.gif", "image3.jpg" ];
var myPicsObj = new picsobj( "this is the description", 3, imageNameArray );

посмотрите здесь, если вы не уверены, что такое конструктор

0 голосов
/ 27 ноября 2010
/* The function constructor of your objects usually use a capitalized names 
 * */
var Picsobj = function(description,indivpicarray){
  this.description=description;
  this.indivpicarray=indivpicarray;
};
/* Is better convert length to a method instead a property passed to the constructor. */ 
/* The methods are attached to the prototype propertie of the constructor. `this` refers to 
 * the actual object where the method is called.
 *  */ 
Picsobj.prototype.getLength = function() {
  if(typeof(this.indivpicarray) != 'object')
    return 0;
  return this.indivpicarray.length;
};


/* Example */
var pic = new Picsobj('Description of pic', ['pic1.jpg','pic2.jpg']);
var anotherPic = new Picsobj('Description of anotherPic', ['anotherPic1.jpg','anotherPic2.jpg']);
console.log(pic.getLength());
console.log(anotherPic.getLength());
0 голосов
/ 27 ноября 2010

Да, это возможно.Например, вы можете сделать это следующим образом, если вы уже знаете значения при программировании:

var picarrays=[{description:"bla","length":1234,"indivpicarray":["a","b","c"]},
               {description:"blah","length":145,"indivpicarray":["a","c","g"]}];

Это дает вам массив объектов массивов.

0 голосов
/ 27 ноября 2010

В JavaScript есть объект Array, который должен делать именно то, что вам нужно.Смотрите примеры на http://www.w3schools.com/JS/js_obj_array.asp, или просто google "javascript Array"

Надеюсь, что поможет

0 голосов
/ 27 ноября 2010

В javascript все возможно:

this.description = ["a","b","c"];

У вас будет массив из 3 элементов, являющихся строками.В реальном мире вы бы определили его как this.description = [];, а затем сделали бы что-то вроде:

picarrays[i].description.push("a");
picarrays[i].description.push("b");
picarrays[i].description.push("c");

Эффективно предоставив вам один и тот же массив, и вы можете перебрать .description, чтобы получить все строки в массиве.Вам также может не понадобиться длина, так как description.length даст вам количество элементов в описании.

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