にデータを並べ替え、私は次のようなデータを持っている:ツリー
var data = [
{ index : 1, sort : 10, parent : 0 },
{ index : 2, sort : 7, parent : 0 },
{ index : 3, sort : 15, parent : 1 },
{ index : 4, sort : 4, parent : 0 },
{ index : 5, sort : 13, parent : 1 },
{ index : 6, sort : 20, parent : 5 },
{ index : 7, sort : 2, parent : 8 },
{ index : 8, sort : 6, parent : 5 },
];
私はで終わるように、どのように効率的に親IDとソート値の両方でこれを並べ替えるん:
var data = [
{ index : 4, sort : 4, parent : 0 },
{ index : 2, sort : 7, parent : 0 },
{ index : 1, sort : 10, parent : 0 },
{ index : 5, sort : 13, parent : 1 },
{ index : 8, sort : 6, parent : 5 },
{ index : 7, sort : 2, parent : 8 },
{ index : 6, sort : 20, parent : 5 },
{ index : 3, sort : 15, parent : 1 },
];
この木構造です。各要素の直後に子があり、同じブランチ上のすべての要素がソート値でソートされます。
私が思いつくのは、最初に親によってソートして、各ブランチで2番目のソートを行うことです。これは非効率的と思われる。
編集:ソート順が正しくありませんでした。私はそれを修正しました。
説明のために編集:各ネストされたブランチは、ブランチの終わりではなく、親の値のすぐ下に表示する必要があります。
編集:データをさらに修正します。
ありがとうTomalak、それはOO Javascriptの素晴らしいビットです。私よりも効率的です。また、再帰の素晴らしい例です。 – SystemicPlural
@SystemicPlural:ありがとう。数分前に追加された機能もご覧ください。 – Tomalak
もう一度ありがとうございます。私はベンチマークすることに決めました。あなたの答えは私の約250倍です。私はあなたの答えをシングルトンクロージャーに変換し、さらに10%増やしました。理由は分かりません。それはシングルトンであるので1つのツリーしか扱えませんが、それは私のユースケースでは問題ありません。 – SystemicPlural