Javascript 如何访问嵌套元素

Javascript 如何访问嵌套元素,javascript,json,object,electron,Javascript,Json,Object,Electron,所以我有一些像这样嵌套的项目 grindstone:{ 1:{ range: { 0: {min: 80 , max: 120}, 1: {min: 100, max: 200}, 2: {min: 180, max: 250}, 3: {min: 230, max: 450}, 4: {min: 430, max: 550} } }, 稍后,在同一个文件中,我称之为,它看起来像: grindVals(craft_id) { va

所以我有一些像这样嵌套的项目

grindstone:{
  1:{
   range: {
    0: {min: 80 , max: 120}, 
    1: {min: 100, max: 200}, 
    2: {min: 180, max: 250}, 
    3: {min: 230, max: 450}, 
    4: {min: 430, max: 550}
  }
},

稍后,在同一个文件中,我称之为,它看起来像:

grindVals(craft_id) {
var map = {};
var grind = this.rune;
var typeNumber = Number(craft_id.toString().slice(-4, -2))
if(typeNumber < 10){
  typeNumber = Number (typeNumber.toString().slice(1));
}
map.set =  grind.sets[Number(craft_id.toString().slice(0, -4))];
map.grade = grind.quality[Number(craft_id.toString().slice(-1))];
map.type = grind.effectTypes [typeNumber];
console.log("this.grindstone[" + typeNumber + "][" + Number(craft_id.toString().slice(-1))+ "].min");

--->Error Happens here
map.min = this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].min;
map.max = this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].max;
return map;
},
grindVals(工艺id){
var-map={};
var grind=this.rune;
var typeNumber=Number(工艺id.toString().slice(-4,-2))
如果(类型号<10){
typeNumber=Number(typeNumber.toString().slice(1));
}
map.set=grind.set[Number(craft_id.toString().slice(0,-4));
map.grade=研磨质量[编号(工艺id.toString().slice(-1));
map.type=grind.effectTypes[typeNumber];
console.log(“this.grindstone[“+typeNumber+”][“+Number(craft_id.toString().slice(-1))+”].min”);
--->这里发生了错误
map.min=this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].min;
map.max=this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].max;
返回图;
},
输出类似于:

grindVals(craft_id) {
var map = {};
var grind = this.rune;
var typeNumber = Number(craft_id.toString().slice(-4, -2))
if(typeNumber < 10){
  typeNumber = Number (typeNumber.toString().slice(1));
}
map.set =  grind.sets[Number(craft_id.toString().slice(0, -4))];
map.grade = grind.quality[Number(craft_id.toString().slice(-1))];
map.type = grind.effectTypes [typeNumber];
console.log("this.grindstone[" + typeNumber + "][" + Number(craft_id.toString().slice(-1))+ "].min");

--->Error Happens here
map.min = this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].min;
map.max = this.grindstone[typeNumber][Number(craft_id.toString().slice(-1))].max;
return map;
},
此.grindstone[1][2].min

它返回了一个错误,行为“找不到未定义的项目[2]”


我做错了什么?

您需要访问中间的
范围
属性(点表示法):

或(括号符号)


在此处阅读有关或的更多信息。

您必须访问
范围
属性:

this.grindstone[1].range[2]
或者,您可以在
研磨石
对象中使用数组:

var grindstone = {
    1 : [
        {min: 80 , max: 120},
        {min: 100, max: 200},
        {min: 180, max: 250},
        {min: 230, max: 450},
        {min: 430, max: 550}
    ]
}
如果使用第二种方法,您可以编写:

this.grindstone[1][2]

主对象中只有一项,而该项只有一项。好的是,您可以通过索引名访问子项。这个.grindstone[1][range][x]@Joraid,
range
在您的例子中是
range='range'
。否则它就不起作用了。@NinaScholz是的,绝对正确,它是一个字符串,不是一个变量。我正在测试这一点——在此期间,您是否有好的资源,让我可以在javascript中读取一些关于数据访问的信息?我在一个用electron编写的开源应用程序中工作,从Java过来对我来说不是很有意义。你可以看看上面的两个链接。一个好主意是使用一个ide,比如ms visual studio,并且在有疑问的情况下,总是在无法访问未定义的对象时使用,这样您就可以访问属性了。在本例中,您可以在实际(缺少)属性之前将结构的输出设置为一个属性。目前我正在使用VS代码,但在代码执行之前,它似乎没有给我太多的信息,此时它确实会引发异常,有没有什么插件可以帮我做一些事情?你可以使用vs的社区版。实际上我不使用vs代码。谢谢你的帮助,我做了一些愚蠢的事情,你帮了我。
this.grindstone[1][2]