javascript - JavaScript 中的多维关联数组

标签 javascript multidimensional-array associative-array

有如下查询结果:(key1和key2可以是任意文本)

id   key1     key2     value

1    fred     apple    2
2    mary     orange   10
3    fred     banana   7
4    fred     orange   4
5    sarah    melon    5
...

并且我希望将数据存储在一个网格中(可能是一个数组)循环所有这样的记录:

         apple    orange   banana  melon
fred        2        4         7     -
mary        -        10        -     -
sarah       -        -         -     5

在 PHP 中这会非常简单,使用关联数组:

$result['fred']['apple'] = 2;

但是在 JavaScript 中这样的关联数组是行不通的。 在阅读了大量的教程之后,我所能得到的就是:

arr=[];
arr[1]['apple'] = 2;

但是 arr['fred']['apple'] = 2; 不起作用。 我尝试了对象数组,但对象属性不能是自由文本。 我读的教程越多,我就越困惑......

欢迎任何想法:)

最佳答案

只需使用常规 JavaScript 对象,它的“读取”方式与关联数组相同。您还必须记住先初始化它们。

var obj = {};

obj['fred'] = {};
if('fred' in obj ){ } // can check for the presence of 'fred'
if(obj.fred) { } // also checks for presence of 'fred'
if(obj['fred']) { } // also checks for presence of 'fred'

// The following statements would all work
obj['fred']['apples'] = 1;
obj.fred.apples = 1;
obj['fred'].apples = 1;

// or build or initialize the structure outright
var obj = { fred: { apples: 1, oranges: 2 }, alice: { lemons: 1 } };

如果您正在查看值,您可能会看到类似这样的内容:

var people = ['fred', 'alice'];
var fruit = ['apples', 'lemons'];

var grid = {};
for(var i = 0; i < people.length; i++){
    var name = people[i];
    if(name in grid == false){
        grid[name] = {}; // must initialize the sub-object, otherwise will get 'undefined' errors
    }

    for(var j = 0; j < fruit.length; j++){
        var fruitName = fruit[j];
        grid[name][fruitName] = 0;
    }
}

关于javascript - JavaScript 中的多维关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329092/

相关文章:

javascript - 当我单击两个单选按钮之一时,如何附加文本字段并将文本字段替换为另一个?

javascript - Node json-schema 防止整数为 null

javascript - 意外的 JavaScript 输出

Javascript - 值存在,然后消失,然后再次出现?

PHP解析关联数组

PHP在关联数组前面加上文字键?

javascript - 编辑按钮不起作用,请帮助如何使编辑按钮编辑值

java - 打印多维数组时出现问题

javascript - 使用关联数组作为 D3 的数据

c++ - 二维数组的内存问题