2016-11-28 12 views
1

これを行う方法を頭に入れて苦労しています。私はこのオブジェクトを持っている:JavaScript:配列を持つオブジェクトを、オブジェクトを持つ配列に分解する

var objData = { 
    _Input_396__REPEAT15_374:["Bedroom2", "Bedroom3", "Bedroom4"], 
    _Input_396__REPEAT15_375:["1st", "2nd", "3rd"], 
    _Input_396__REPEAT15_376:["122", "133", "144"], 
    _Input_396__REPEAT15_377:["122", "133", "144"], 
    _Input_396__REPEAT15_378:["Bamboo", "FloorNone", "Cork"] 
}; 

各配列の長さはそれほど3の長さは、常に長さ習慣、しかし長さが変化し、オブジェクトに他と同じであろう。

私はこれに解体する必要があります。

var arrData = [ 
    { 
    _Input_396__REPEAT15_374:"Bedroom2", 
    _Input_396__REPEAT15_375:"1st", 
    _Input_396__REPEAT15_376:"122", 
    _Input_396__REPEAT15_377:"122", 
    _Input_396__REPEAT15_378:"Bamboo" 
    }, 
    { 
    _Input_396__REPEAT15_374:"Bedroom3", 
    _Input_396__REPEAT15_375:"2nd", 
    _Input_396__REPEAT15_376:"133", 
    _Input_396__REPEAT15_377:"133", 
    _Input_396__REPEAT15_378:"FloorNone" 
    }, 
    { 
    _Input_396__REPEAT15_374:"Bedroom4", 
    _Input_396__REPEAT15_375:"3rd", 
    _Input_396__REPEAT15_376:"144", 
    _Input_396__REPEAT15_377:"144", 
    _Input_396__REPEAT15_378:"Cork" 
    } 
]; 

これを達成するための最良の方法は何ですか?

答えて

8

オブジェクトのキーを反復して配列を作成し、すべてのアイテムで新しい配列を作成できます。

方法は、次に、指定された配列

  • パターンx = x || defaultValue、truthy値とならないための試験xを反復するためのオブジェクト

  • Array#forEachの独自の特性のために

    • Object.keysを使用しましたdefaultValuexを割り当てます。

    var objData = { _Input_396__REPEAT15_374: ["Bedroom2", "Bedroom3", "Bedroom4"], _Input_396__REPEAT15_375: ["1st", "2nd", "3rd"], _Input_396__REPEAT15_376: ["122", "133", "144"], _Input_396__REPEAT15_377: ["122", "133", "144"], _Input_396__REPEAT15_378: ["Bamboo", "FloorNone", "Cork"] }, 
     
        arrData = []; 
     
    
     
    Object.keys(objData).forEach(function (k) { 
     
        objData[k].forEach(function (a, i) { 
     
         arrData[i] = arrData[i] || {}; 
     
         arrData[i][k] = a; 
     
        }); 
     
    }); 
     
    
     
    console.log(arrData);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

  • 2

    あなたは関数型プログラミングスタイルで、このES6スクリプトでそれを行うことができます:

    var objData = { 
     
        _Input_396__REPEAT15_374:["Bedroom2", "Bedroom3", "Bedroom4"], 
     
        _Input_396__REPEAT15_375:["1st", "2nd", "3rd"], 
     
        _Input_396__REPEAT15_376:["122", "133", "144"], 
     
        _Input_396__REPEAT15_377:["122", "133", "144"], 
     
        _Input_396__REPEAT15_378:["Bamboo", "FloorNone", "Cork"] 
     
    }; 
     
    
     
    var arrData = objData[Object.keys(objData)[0]].map((_, i) => 
     
        Object.keys(objData).reduce((acc, key) => (acc[key] = objData[key][i], acc), {}) 
     
    ); 
     
    
     
    console.log(arrData);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    関連する問題