javascriptツリーのまとめ金額

2059 ワード

企業の応用を開発する時、ツリーの形で金額をまとめる場面があります.ツリーのリストの中の葉っぱノード(サブノードがない)の金額を親ノードにまとめます.
このような需要は、一般的に、フロントエンドで処理されます.すなわち、JavaScriptを使用して処理されます.葉っぱノードの金額は継続的に変更される可能性があります.毎回変動するたびに、バックグラウンドが明らかに現実的ではありません.
場面と実現
マスタテーブルのシーンがあると仮定します.第一に、表からツリー型のリストで、葉っぱノードだけが金額を記入できます.親ノードはその下の葉っぱノードの金額をまとめます.第二のポイントは、メインテーブルには金額フィールドがあり、値を取ってテーブルからルートノード(トップノード)をまとめた金額をまとめます.
まず、テーブル内のすべてのルートノードを巡回する方法を作成します.
function sumMoney2Main(items) {
  let sumMoney = 0;
  for (let item of items) {
    this.sumMoneyToItsParent(item);
    sumMoney += item.money || 0;
  }
  return sumMoney;
}
次に、サブノードの金額を再帰的にまとめる方法を作成する.
function sumMoneyToItsParent(item) {
  let sumMoney = 0;
  if (item.children && item.children.length) {
    for (let childItem of item.children) {
      sumMoneyToItsParent(childItem);
      sumMoney += childItem.money || 0;
    }
    item.money = sumMoney;
  }
}
このようにして、ツリーの形をまとめた金額の需要が完成しました.
簡単な分析
ここには主にいくつかのポイントがあります.
1.JavaScriptでは、配列中のオブジェクトはすべてヒープメモリに保存されています.スタック内の変数はこれらのオブジェクトに対する参照のみを保存していますので、上のコードでは、配列中のオブジェクトの参照をいくつかの変数に与えても変更しても、実際には配列中のオブジェクトに対する変更が最も基本的です.この特性はレプリカと呼ばれる.
2.再帰のポイントは、サブノードを巡回する時に、先にサブノードを遍歴して、サブノードがなくなるまで、1レベルの累積金額を開始することである.
 
彼らは花火を見ています.あなたのことを思い出す人はいません.