如何为用户输入的数据正确设置对象数组

时间:2011-08-03 00:45:49

标签: javascript arrays object

我设置了一个在javascript中运行rss feed的图库查看器,我试图尽可能减少应用程序用户的知识负担。有一个单独的javascript文件,它将所有自定义数据与应用程序分开存放,然后由默认参数对象扩展对象数组,这样用户只需输入他们想要为每个库更改的变量,而是新的必须为每个对象创建一个至少进入rss路径的对象。

目前默认变量看起来像

var default = { id:'x', path:"", row:1, col:5 (etc)}

我已经设置了customVars脚本,因此自定义数据是一个看起来像这样的对象数组

var customVars = [

    albumList = { 
    path :"http://",                            
    displayType : "list"            
    },

    album1 = {
    path :   "http://",                         
    rows : 1 ,  col : 6         
    }
];

编辑(重要) - 我需要能够以有效的方式遍历customVars数据,特别是当我不知道他们创建的专辑对象的名称时 - 换句话说,customVars [ 1] .rows需要能够返回1

这是实现这个目标的正确方法吗?我是否会遇到奇怪的错误,或者有更好的方法来实现这一目标吗?是否可以在数组中声明这样的对象(我试图避免让用户声明变量然后让它们自己设置数组

EDIT2

将其更改为一个对象数组并添加到参数列表中的变量id,这似乎现在正常工作 - 仍然不确定我是否可以这种方式声明对象,但我需要能够遍历对象列表

var customVars = [
{   
    id  : 'album0',
    path    : "https://",                           
    rssType : "picasaAlbum" ,   displayType : "list"            
},
{
    id  : 'album1',
    path    :"https://",                            
    rows    : 1 ,   collumns : 5        
}
];

3 个答案:

答案 0 :(得分:0)

你不能在数组中声明abc = something。你可以像这样重写它:

var customVars = [
{
    albumList: { 
        path :"http://",                            
        displayType : "list"            
    },

    album1: {
        path :   "http://",                         
        rows : 1 ,  col : 6         
    }
},
{
    albumList: { 
        path :"http://",                            
        displayType : "list"            
    },

    album1: {
        path :   "http://",                         
        rows : 1 ,  col : 6         
    }
}]

这是一个正确的内联javascript对象创建,即使很多人认为它是json:)

答案 1 :(得分:0)

我认为更易读和可维护的结构是使用对象而不是数组。类似的东西:

var customVars = {
      albumList : { path :"http://",
                    displayType : "list" 
                  },
      album1 :    { path : "http://",
                    rows : 1,
                    col : 6
                  }
};

我从来没有见过用于声明变量的语法,只要将它们包含在数组中即可。我想它会起作用(我不能费心去尝试它;我假设你已经有了)因为每个数组元素仍然是一个表达式,但我不喜欢它因为我认为它在将来的维护中可能会让人困惑,而且它会创建albumListalbum1作为全局变量。我(几乎)不会在没有var语句的情况下声明变量,即使我想要它们是全局的,因为它很容易引入难以发现的错误。

答案 2 :(得分:0)

为什么不在Object中使用实际数组?如果你要有一个列表,你应该使用一个数组,这样你就可以迭代它们。

var customVars = {
  albumList : { 
    path :"http://",
    displayType : "list",
    albums:[{
             name:"album1:,
             path : "http://",
             rows : 1,
             col : 6                   
            },
            {
             name:"album2:,
             path : "http://",
             rows : 1,
             col : 6                   
            }
    ]}   
};