2017-02-11 125 views
-1

我想弄清楚结构我的JavaScript对象的最佳方式。我想有是一个对象,我可以在类似的结构这个选择通过按键嵌套的对象: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中挣扎...

+0

你可能想看看https://github.com/paularmstrong/normalizr – Aprillion

回答

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'; 
+0

它比[数组符号]更多[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors#Bracket_notation] - - –

+0

@ NinaSch奥尔兹谢谢你指出。答案已更新。 – iblamefish

+0

对不起,它可能是值得一提的,我使用React和这个对象住在组件的getInitialState部分。我不认为我被允许创建变量,因为你已经在getInitialState中的上面的答案中完成了......至少用你的语法来试着去吐出错误。 –

0

方便的方式来构造你的javascript对象。
考虑使用自定义吸气方法,它接受索引/号作为参数:

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"