javascript对象索引键

时间:2017-02-11 11:33:05

标签: javascript object

我试图找出构建我的javascript对象的最佳方法。我想要的是一个对象,我可以通过与此类似的结构中的键选择嵌套对象:

        trackObject:
            [{
            row1:{rowId:"#row1",rowSample:
                {sampleId:"#1",notes:
                    [0,400,800]
                }
            },
            row2:{rowId:"#row2",rowSample:
                {sampleId:"#2",notes:
                    [0,400,800]
                }
            },                
        }]

理想情况下,我希望能够通过在'行上编制索引来修改此对象。等级row1row2。问题是使行名称成为变量。即上面的对象将通过调用trackObject.row1返回我需要的对象,但由于row1部分需要是动态的,我不确定如何动态地从这一点索引它。

我尝试了一些变体,比如不使trackObject成为数组而是将对象改为对象并将row1更改为"row1":{rowId...但是我已经能够引用对象属性了嵌套({rowId...

我以前用JSON中的密钥设置了对象,并且按密钥进行了很好的索引,但由于某种原因,我在js中挣扎......

2 个答案:

答案 0 :(得分:2)

您可以使用括号表示法访问对象的成员。

var obj = {
  row1: {
    rowId: '#row1'
  },
  row2: {
    rowId: '#row2'
  }
};

// index stored in variable
var index = 'row1';

// get row by using bracket notation
var row = obj[index];

console.log(row.rowId); // '#row1';

答案 1 :(得分:0)

构建javascript对象的便捷方式。
考虑使用接受 的自定义 getter 方法索引/数字作为参数:

var data = {
  trackObject :
  {
    row1: {
      rowId: "#row1",
      rowSample: {
        sampleId: "#1",
        notes: [0,400,800]
      }
    },
    row2: {
      rowId: "#row2",
      rowSample: {
        sampleId: "#2",
        notes: [0,400,800]
      }
    },                
  },
  getRow : function (idx) {
    var obj = this.trackObject['row' + idx];
    if (!obj) {
      throw new Error("Undefined trackObject key: row" + idx);
    }
    return obj;
  }
};

console.log(data.getRow(2).rowSample);
console.log(data.getRow(5).rowSample); // will throw "Uncaught Error: Undefined trackObject key: row5"