2017-04-19 60 views
1

我有一个JSON格式文件的几个对象有相同的字符串,但不同的值:如何声明一个变量的值是一个由JS中的变量组成的对象?

{ 
    "object_1": { 
     "data1": [1, -1], 
     "data2": [2, -1], 
     "data3": [3, -1], 
    }, 
    "object_2": { 
     "data1": [4, -1] 
     "data2": [5, -1], 
     "data3": [6, -1], 
    } 
} 

我能够与getJSON()检索对象的数据:

var url = "https://website.com/file.json"; 
$.getJSON(url, function (json) { 
    var mydata1 = json.object_1.data1; 
    var mydata2 = json.object_1.data2; 
    var mydata3 = json.object_1.data3; 
}); 

但我有几个对象,我不想为它们重复相同的三行。我想创建这些变量mydata1mydata2mydata3通过使用与对象id作为输入的函数。

我的问题是,我不知道如何创建一个变量,当它的值是一个变量组成的对象。例如,这里的id是一个用于选择JSON对象的变量:object_1object_2

$.getJSON(url, function (json) { 

    var id = 1 // use id = 1 on page load 

    function loadJSON(id) { 

     // all these declaration fail 
     eval("var mydata1 = string.concat('json.object_', id, '.data1')"); 
     var mydata1 = string.concat("json.object_", id, ".data1"); 
     var mydata1 = window["json.object_" + id + ".data1"]; 
    ); 

    // then rewrite the data on click 

    $('#button_2').click(function() { 
     loadJSON(2);  
    });  
    $('#button_1').click(function() {  
     loadJSON(1);  
    }); 

)}, 

如何在函数中声明这些变量?

谢谢

+0

什么,你现在要做的只能用'的eval()'完成,但真的没有点。不要使用单个变量,而要使用对象并构造对象属性名称。 – Pointy

+1

'json ['object _'+ id] .data1' ... –

回答

1

使用bracket notation可变属性名来引用值:

var mydata1 = json['object_' + id].data1; 
相关问题