2017-07-17 2 views
0

にフラットな配列を変換し、私はフォーマット以下の配列を持っている:は現在、ネストされた親子形式

[{ 
    key: "a" 
}, { 
    key: "b" 
}, { 
    key: "c" 
}, { 
    key: "d" 
}, { 
    key: "e" 
}] 

配列のすべての要素がそれに次の要素の親です。フォーマット以下にそれを変換するために必要な

[{ 
    key: "a", 
    Nodes: [{ 
     key: "b", 
     Nodes: [{ 
      key: "c", 
      Nodes: [{ 
       key: "d", 
       Nodes: [{ 
        key: "e" 
       }] 
      }] 
     }] 
    }] 
}] 

私はこれを達成しているが、私が実装したロジックが非常に長いですし、今私は、コードを最適化したいです。

だから私は知りたいArray#reduceRightを使用して、この

+2

1つの目的は、別の子であるか否かを判断しますか? – Aron

+2

あなたのコードを見せていただきますようお願い申し上げます。それを見ずにあなたの方法を批判する方法はありますか? –

答えて

1

を行うための最も最適化された方法では、これが簡単になります:

const array = [{ 
 
    key: "a" 
 
}, { 
 
    key: "b" 
 
}, { 
 
    key: "c" 
 
}, { 
 
    key: "d" 
 
}, { 
 
    key: "e" 
 
}]; 
 

 

 
const nested = array.reduceRight((Nodes, obj) => { 
 
    if (Nodes) { 
 
    return [Object.assign({}, obj, { Nodes })]; 
 
    } else { 
 
    return [obj]; 
 
    } 
 
}, null); 
 

 
console.log(nested);

+0

これは私のロジックよりもはるかに優れています。 – blueMoon

+0

ねえ、Internet ExplorerではObject.assignはサポートされていません。他の回避策を提案することができます。もしそうなら、それに応じてあなたの答えを更新してください。 – blueMoon

+0

polyfillを使用してください。お試しくださいhttps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill – Aron

関連する問題