从json在javascript中创建动态多维关联数组

Kal*_*reg 0 javascript arrays jquery json

我从PHP获得一个JSON对象,它包含多行,如下所示:

id | type   | amount| age
1  |  abc   |   1    |  1
2  |  def   |   2    |  1
3  |  def   |   4    |  2
4  |  def   |   13   |  3
Run Code Online (Sandbox Code Playgroud)

我通过JavaScript运行它:

$.ajax({
    type: 'POST',
    url: "test.php",
    dataType: 'json',
    success: function (data) {
        var arr = [];
        for (var i = 0; i < data.length; i++) {
            arr[data[i].type][data[i].age] = data[i].ammount;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

想法是获得如下所示的数组:

arr[def][1] = 2
arr[def][2] = 4
arr[def][3] = 13
arr[abc][1] = 1
arr[abc][2] = 0 // note that this one is just empty because it was not declared from json data.
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到一个错误:

未捕获的TypeError:无法设置未定义的属性"1"

1是[data[i].age],如果我更改其值错误出现与其他数字.

Edg*_*ado 5

你应该做:

var arr = {};    
for (var i = 0; i < data.length; i++) {
   var type = data[i].type,
       age = data[i].age,
       amount = data[i].ammount;
   if(!arr[type]) arr[type] = {};  //Create arr[type] if it doesn't exist
   arr[type][age] = amount;
}
Run Code Online (Sandbox Code Playgroud)

你可以填充空单元格0,但我最好建议这样做以便阅读:

//returns the value or 0
function readArr(arr, type, age){
   if(!arr[type]) return 0;
   return arr[type][age] || 0;  
}
Run Code Online (Sandbox Code Playgroud)

然后,而不是用读书arr["abc"][2],你会阅读readArr(arr, "abc", 2).

(如果你愿意,当然你可以避免声明一个函数但是使用它的逻辑内联,你会做类似的事情(arr["abc"] ? arr["abc"][2] || 0 : 0))

干杯,来自玻利维亚拉巴斯