5

キーを保持する配列と配列を保持する配列の 2 つの配列があり、各配列には値が含まれています。各オブジェクトがキーと値をペアにするオブジェクトの配列を作成したいと思います。これを行うために、配列を作成しました。現在、オブジェクトを配列にプッシュする前に、オブジェクトを作成して入力しようとしています。私のコードは次のようになります。

var keys = [key1, key2, key3];
var values = [
                [A-value1, A-value2, A-value3],
                [B-value1, B-value2, B-value3],
                [C-value1, C-value2, C-value3]
             ];

var arrayOfObjecs = [];
for(var i=0; i<values.length; i++){
    var obj = {
    for(var j=0; j<values[i].length; j++){
            keys[j] : values[i][j];
    }
    };
    arrayOfObjects.push(obj);
}

最後に、arrayOfObjects を次のようにしたいと思います。

var arrayOfObjects = [
                        {
                         key1 : A-value1,
                         key2 : A-value2,
                         key3 : A-value3
                        },
                        {
                         key1 : B-value1,
                         key2 : B-value2,
                         key3 : B-value3
                        },
                        {
                         key1 : C-value1,
                         key2 : C-value2,
                         key3 : C-value3
                        }
                     ];

この質問は私がやりたいことと似ていますが、オブジェクト内で 2 回ループすることはできません。

4

3 に答える 3

6

あなたの質問は、実際にはオブジェクトプロパティの角括弧表記に関するものです。
オブジェクト[プロパティ名]を使用することは、オブジェクトを使用することと同じです。プロパティ名.

var myObj  = {};
myObj['x'] = 12;
console.log(myObj.x);  -->> prints 12

今あなたのコードで:

var arrayOfObjects = [];
for(var i=0; i<values.length; i++){
    var obj = {};
    for(var j=0; j<values[i].length; j++){
         obj[keys[j]] = values[i][j];  
      }
    arrayOfObjects.push(obj);
}

「それは奇妙なことをします」への返信: このコードは機能します。

この入力で:

var keys = ['key1', 'key2', 'key3'];
var values = [
            [12,112, 1112],
            [31, 331, 3331],
            [64, 65, 66]
         ];

出力は次のとおりです。

   {   {key1: 12, key2: 112, key3: 1112},  
       {key1: 31, key2: 331, key3: 3331},   
       {key1: 64, key2: 65, key3: 66}        }

フィドルはここにあります: http://jsfiddle.net/fyt8A/

于 2013-06-27T21:48:46.733 に答える
1

試す:

var arrayOfObjecs = values.map(function(value_set){
                                  var obj = {}; 
                                  for(i = 0; i < keys.length; i++ )
                                        obj[keys[i]]=value_set[i];      
                                  return obj;})

map は、配列をループするための優れた関数です

于 2013-06-27T21:31:06.460 に答える
0

あなたは正しい軌道に乗っています。

…
    var obj = {
    for(var j=0; j<values[i].length; j++){
        keys[j] : values[i][j];
    }
    };
…

それは構文エラーです。オブジェクト リテラルの途中に for ループを配置することはできません。代わりに、1 つのステップで空のオブジェクトを作成し、ループ内で割り当て (ブラケット表記を使用) によってプロパティを入力します。

…
    var obj = {};
    for(var j=0; j<values[i].length; j++){
         obj[keys[j]] = values[i][j];
    }
…
于 2013-06-27T21:53:25.860 に答える