8094


元オブジェクト  
KEY VALUE  
{tokyo,4},  
{osaka,9}

を、

変更後オブジェクト  
KEY VALUE

{area,tokyo}  
{num,4},

{area,osaka}  
{num,9}

と構成し直した上で、さらに下記のように、「元オブジェクト要素数」だけ数がある配列に入れたいのですが、どうすればよいでしょうか？

配列  
INDEX VALUE  
0 変更後オブジェクトの一つ目の組み合わせ  
1 変更後オブジェクトの二つ目の組み合わせ

※変更後オブジェクトのキー名「area」「num」は固定名です


CC BY-SA 3.0
2015-03-12T14:35:32.407
7846
2015-03-19T04:39:59.637
7886
question
javascript
JavaScript ／ オブジェクトを構成し直した上で、配列へ格納したい


こういうことでよろしいのでしょうか。

[code]

    var obj = [{tokyo: 4}, {osaka: 9}];
    
    var result = obj.map(function(v){
      var o={};
      for(w in v){ o.area=w; o.num=v[w]; }
      return o;
    });
    
    console.log(result); // -> [{area:"tokyo", num:4}, {area:"osaka", num:9}]
    
[/code]


CC BY-SA 3.0
2015-03-12T23:59:17.343
7852
2015-03-12T23:59:17.343
8351
7846
answer

[code]

    { tokyo: 4, osaka: 9 }
    
[/code]

というオブジェクトを、

[code]

    [
        { area: 'tokyo', num: 4 },
        { area: 'osaka', num: 9 }
    ]
    
[/code]

というオブジェクトの配列に変換したい、ということで合っていますか？  
やるならこんな感じだと思います。

[code]

    var obj = { tokyo: 4, osaka: 9 };
    var result = [];
    for (var area in obj) {
        result.push({ area: area, num: obj[area] });
    }
    
[/code]

`Object.keys()`と`Array.prototype.map()`に対応している最近のブラウザなら、tutinocoさんの回答のようにも書けます。

[code]

    var obj = { tokyo: 4, osaka: 9 };
    var result = Object.keys(obj).map(function (area) {
        return { area: area, num: this[area] };
    }, obj);
    
[/code]

この程度ならどっちを選んでも好みの問題だと思います。


CC BY-SA 3.0
2015-03-19T04:39:59.637
8094
2015-03-19T04:39:59.637
8078
7846
answer