【问题标题】:Javascript Object Creation with Index Properties使用索引属性创建 Javascript 对象
【发布时间】:2012-03-13 06:02:45
【问题描述】:

我认为我的标题措辞正确,但是...

假设我有一个数组:

var arr = ['set1','set2','set3','set4','set5','set6'];

我需要创建一个像这样的对象:

'item(0).name' : '//some string'

'item(0).value(0)' : 'set1' // a.k.a arr[0] 

'item(0).value(1)' : 'set2' // a.k.a arr[0]

'item(0).value(2)' : 'set3' // a.k.a arr[0]

等等……

然后随着它的继续,也可以继续使用 item(1).name 并且此后的所有其他属性将是 item(1).value(0), item(1).value(1)、item(1).value(2) 等等……

我知道每个数组都会有循环,然后使用 arr 索引我可以填充值,但是我的问题集中在实际创建 obj 属性 'item().name' 或 'item().value()'。如何实现这一目标?

更新

这实际上是 API 调用的一部分,必须看起来像上面写的那样,因为它后来在数据 obj 中扩展并传递给调用。希望这能澄清一点。

var 数据 = {

x : 0,

y: 1,

z:6,

'item(0).name' : '字符串',

'item(0).value(0)' : 'set1',

'item(0).value(1)' : 'set2',

'item(0).value(2)' : 'set3'

}

【问题讨论】:

    标签: javascript arrays object indexing


    【解决方案1】:
    function demo(name, vals) {
        this.name = name;
        this.value = vals || [];
    }
    
    
    var x = new demo('some string',  ['set1','set2','set3','set4','set5','set6']);
    
    console.log(x.name);
    console.log(x.value[0]); // etc...
    
    
    var item = [x, new demo('some string2',  ['set1','set2','set3','set4','set5','set6'])];
    console.log(item[0].value[1]);  // etc...
    

    或创建一个包装器(如果您不想直接通过 [..] 进行索引):

    function demo2(name, vals) {
        this.name = name;
        this.value = function(index) {
            return vals[index];
        }
    }
    

    希望这有助于 -ck

    【讨论】:

      【解决方案2】:

      改为考虑基于 JSON 的结构。它们比简单的数组更具自我描述性。属性可以非常随意。

      {
          "firstName": "Jason",
          "lastName": "Jones",
          "address": {
              "city": "San Francisco, CA",
              "zip": 94121,
              "address": "444 Columbus Ave"
          },
          "email": [
              "jason@sf.com",
              "sjones@adobe.com"
             ]
      }
      

      编辑:您的数据 (?)

      var data = {
          'x':0,
          'y':1,
          'z':6,
          'name':'something',
          'item': [
              'value':'set1',
              'value':'set2',
              'value':'set3'      
           ]
      }
      

      【讨论】:

      • 如果对象必须看起来与上面的描述完全一样怎么办?以便它可以扩展到另一个数据对象并与请求一起使用?我想,主要问题是我将如何创建一个看起来像 item(0).name(0) 和/或 item(0).value(0++).. 的对象
      • 我已经添加了一个例子,我希望它有意义。
      • 谢谢,但我认为我对整个问题的措辞都不正确。我已经包含了一个小提琴来解释我在寻找什么,我想我让它工作了。而且,我认为我也完全把整个方法复杂化了。 jsfiddle.net/pRNZJ/1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 2012-06-10
      相关资源
      最近更新 更多