2016-08-20 9 views
0

文字列の配列でネストされた配列を作成しようとしています。 配列上の各文字列オブジェクトは、 '|'で区切られます。既存の配列にネストされた配列を作成するためにそのcharを使用します。JavaScriptの文字列の配列に基づいてネストされた配列を作成するには?

編集修正 IE:現在の配列

var arr = [ 
    { val : 'root|leaf|lead2|boo|foo|lee'}, 
    { val : 'root|leaf|lead3|boo|foo|lee'}, 
    { val : 'root|leaf2|boo'}, 
    { val : 'root|leaf2|foo'}, 
    { val : 'root|leaf2|leaf3|more'}, 
    { val : 'root|leaf2|leaf3|things'}, 
    { val : 'root|leaf2|leaf3|here'}, 
    { val : 'sibling|leaf|leaf2|boo'}, 
    { val : 'sibling|leaf|leaf2|foo'}, 
    { val : 'sibling|leaf|leaf2|lee'}, 
    { val : 'sibling|boo'}, 
    { val : 'sibling|foo'}, 
    { val : 'sibling|boo|leaf3'}, 
    { val : 'sibling|boo|leaf3|more'}, 
    { val : 'sibling|boo|leaf3|things'}, 
    { val : 'sibling|boo|leaf3|here'}, 
    { val : 'sibling|ops'}, 
]; 

var nested = [ 
    root = [ 
     leaf = [ 
      leaf2 = [ 
       'boo', 'foo', 'lee' 
      ], 
      leaf3 = [ 
       'boo', 'foo', 'lee' 
      ] 
     ], 
     leaf2 = [ 
      'boo', 'foo', leaf3 = [ 
       'more', 'things', 'here' 
      ] 
     ] 
    ], 
    sibling = [ 
     leaf = [ 
      leaf = [ 
       leaf2 = [ 
        'boo', 'foo', 'lee' 
       ] 
      ] 
     ], 
     'ops', 
     'boo', 'foo', leaf3 = [ 
      'more', 'things', 'here' 
     ] 
    ] 
]; 
+0

、それはあなたが – hpfs

+0

イムないjsの上の専門家を必要とする正確ん何libにあなたは一例で試すことができますが、lodashを見ていましたか? – 9879800

+0

例の結果配列に有効なJavaScriptが含まれていません。私たちはあなたを助ける方法を知っているので、これを修正できますか?そうでなければ、JavaScriptエラーを作成する助けとなります。何も意味がありません。 – Delosdos

答えて

1

あなたが.map().reduce()方法を用いることで、ここで機能的なアプローチを見つけることができます。考え方は、|文字を分割してパスを解析し、その場でオブジェクトを構築することです。

const arr = [ 
    {cat : 'one|two|thre|boo'}, 
    {cat : 'one|two|boo|boo|ouch'}, 
    {cat : 'one|two|thre|boo|lee'}, 
    {cat : 'one|hey|something|other'}, 
    {cat : 'one|hey|keys|other'}, 
    {cat : 'this|blaj|something|other'}, 
]; 


function create(array) { 
    const parse = elm => elm.cat.split('|'); 

    const build = (keys, obj, acc) => { 
    keys.reduce((a, b) => { 
     if (!a[b]) a[b] = {}; 
     return a[b]; 
     }, obj); 
    Object.assign(acc, obj); 
    return acc; 
    }; 

    const obj = {}; 

    return array 
    .map(a => parse(a)) 
    .reduce((acc, keys) => build(keys, obj, {}), {}); 
} 

console.log(create(arr)) 

あなたは見つけることができますWorking plunkr

+0

ECMAScript 5.1と互換性がありますか? – 9879800

+2

通常の関数で矢印関数を置き換え、キーワード "const"を "var" –

関連する問題