2017-03-17 19 views
0

私はjavascriptを初めて使い、不変のjsを使ってタスクを完了したいと思います。 私はこのようなマップを持っています:不変のjsでネストされたマップをループする

const clients = Map({ 
     "c1": { 
      "id": "c1", 
      "isLegalEntity": false, 
      "wantsEstatements": true, 
      "portfolios": { 
       "a": { 
        "id": "a", 
        "type": "Cash" 
       }, 
       "b": { 
        "id": "b", 
        "type": "Margin" 
       } 
      } 
     }, 
     "c2": { 
      "id": "c2", 
      "isLegalEntity": false, 
      "wantsEstatements": true, 
      "portfolios": { 
       "e": { 
        "id": "e", 
        "type": "Cash" 
       }, 
       "f": { 
        "id": "f", 
        "type": "Margin" 
       } 
      } 
     } 
    }) 

私は3つのテーブルを作成したいと思います。最初のテーブルには "c1"と "c2"の値が含まれているので、私が読んだドキュメントからは、clients.keys()プロパティを使用しています。 他のテーブルには、["e"、 "f"]のようなすべてのポートフォリオIDが含まれている必要があり、最後のテーブルには次のようなすべてのポートフォリオタイプが含まれている必要があります:["cash"、 "margin"]ドキュメントからこれを行う方法。どのようにするか知っていますか?

答えて

1

この例では、配列を取得した後に何をしたいのか分からないため、単純にHTMLタグに表示しています。ただし、これはあなたが探している配列のそれぞれを作成する方法を示すはずです。最初のステップは、Array.from(clients.keys())を使用してクライアントIDの配列を取得することです。コール。その後、クライアントごとに標準のjavascriptオブジェクトを返すclients.getIn()呼び出しでクライアントIDを使用します。この後、標準のjavascriptオブジェクトアクセスメソッドを使用して、クライアントオブジェクトから必要な配列を構築できます。

var clients = Immutable.Map({ 
 
    "c1": { 
 
    "id": "c1", 
 
    "isLegalEntity": false, 
 
    "wantsEstatements": true, 
 
    "portfolios": { 
 
     "a": { 
 
     "id": "a", 
 
     "type": "Cash" 
 
     }, 
 
     "b": { 
 
     "id": "b", 
 
     "type": "Margin" 
 
     } 
 
    } 
 
    }, 
 
    "c2": { 
 
    "id": "c2", 
 
    "isLegalEntity": false, 
 
    "wantsEstatements": true, 
 
    "portfolios": { 
 
     "e": { 
 
     "id": "e", 
 
     "type": "Cash" 
 
     }, 
 
     "f": { 
 
     "id": "f", 
 
     "type": "Margin" 
 
     } 
 
    } 
 
    } 
 
}); 
 

 
function logArray(arr) { 
 
    var str = "["; 
 
    for (var i = 0; i < arr.length; i++) { 
 
    str += arr[i]; 
 
    if (i < arr.length - 1) str += ","; 
 
    } 
 
    str += "]" 
 
    document.getElementById("info").innerHTML += str + "<br>"; 
 
} 
 

 
var client_id_array = Array.from(clients.keys()); 
 
logArray(client_id_array); 
 
for (var i = 0; i < client_id_array.length; i++) { 
 
    var obj = clients.getIn([client_id_array[i]]); 
 
    var portfolio_array = Object.keys(obj.portfolios); 
 
    logArray(portfolio_array); 
 
    var types = []; 
 
    for (j = 0; j < portfolio_array.length; j++) { 
 
    types[j] = obj.portfolios[portfolio_array[j]].type; 
 
    } 
 
    logArray(types); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.js"></script> 
 

 
<div id="info"></div>

+0

素晴らしいです!ありがとう! – user7334203

+0

私はここに少し問題があります...私はconsole.logにポートフォリオアレイを試みますが、var portfolio_array = Object.keys(obj.portfolios);ポートフォリオが定義されていないというエラーを私に示します – user7334203

+0

私は適切な答えを見つけました。私はconst obj = clients.getIn([clientsIdArray [0]、 'portfolios'])を使用します。 const portArray = obj.keySeq()。toArray() – user7334203

関連する問題