包含数组的对象数组可能吗?

时间:2010-11-27 16:51:24

标签: javascript arrays object

我正在尝试在我的页面上运行幻灯片,该幻灯片来自多个图像组(类别),如果选中了页面上的特定复选框(每个类别一个),则会在幻灯片中显示。我成功地将其编码为两个类别,但我正在尝试使代码更容易定制。我有一个绝妙的想法,使用自定义对象而不是数组。我认为这种方法可能会让我更接近我在此过程中使用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();}

计划是使用描述属性作为标题或描述页面上的元素,使用length属性来帮助确定要循环的图片数量,并使用(这里是我的问题所在......)对象属性名为indivpicarray,用于存储图像名称的ARRAY(数组的长度将从picsobj更改为picsobj)。我不知道这是否可行,如果是,我需要语法方面的帮助。感谢您阅读我的问题。再次,对不起,如果有任何误用的话,我有点像n00b,并通过“查看源代码,复制,粘贴,更改”了解了很多

5 个答案:

答案 0 :(得分:3)

  

并使用被调用的对象属性   indivpicarray存储ARRAY   图像名称。

这很好。具有数组属性的对象技术非常常见。像任何其他变量一样处理数组。只需将其添加到构造函数中:

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 );

see here if you're not sure what a constructor is

答案 1 :(得分:0)

在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会为您提供描述中的项目数。

答案 2 :(得分:0)

是的,这是可能的。例如,如果您在编程时已经知道了这些值,就可以这样做:

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

这为您提供了一组数组对象。

答案 3 :(得分:0)

JavaScript中有一个名为Array的对象,它应该完全符合您的需要。 请参阅http://www.w3schools.com/JS/js_obj_array.asp上的示例,或只是谷歌“javascript数组”

希望有所帮助

答案 4 :(得分:0)

/* 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());