【问题标题】:How to set up an array of objects properly for user inputed data如何为用户输入的数据正确设置对象数组
【发布时间】:2011-08-03 00:45:49
【问题描述】:

我正在设置一个在 javascript 中运行 rss 提要的画廊查看器,我试图将应用程序用户的知识负担减至最低。有一个单独的 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        
}
];

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    我认为一个更具可读性和可维护性的结构是使用对象而不是数组。比如:

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

    我从未见过在将变量包含在数组中的同时声明变量的语法。我想它会起作用(我不介意尝试它;我假设你已经这样做了),因为每个数组元素仍然是一个表达式,但我不喜欢它,因为我认为它在未来的维护过程中可能会造成混淆,而且它将创建albumListalbum1 作为全局变量。我(几乎)不会在没有 var 语句的情况下声明变量,即使我希望它们是全局变量,因为引入难以发现的错误变得太容易了。

    【讨论】:

      【解决方案2】:

      为什么不在你的对象中使用一个实际的数组呢?如果你要列出一些东西,你应该使用一个数组,这样你就可以遍历它们。

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

      【讨论】:

        【解决方案3】:

        您不能在数组中声明 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 :)

        【讨论】:

        • 我试过这样,但我需要能够像数组一样遍历它,比如 customVars[1].rows 抛出错误
        • @user667122 - 你可以使用for(item in customVars) {} 来遍历对象(唯一的一点是不像标准的循环数组,迭代的顺序可能不是你所期望的)。
        猜你喜欢
        • 2014-05-05
        • 1970-01-01
        • 2020-04-09
        • 2018-04-04
        • 2012-12-26
        • 2021-09-21
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多