1. ホーム
  2. javascript

[解決済み] JavaScriptによる多次元連想配列

2023-04-09 04:21:39

質問

次のようなクエリ結果があります。(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;
    }
}