1

次のデータを並べ替えようとしています。

var data = [
    { path: '/a', order: 0 },
    { path: '/b', order: 1 },
    { path: '/a/d', order: 1 },
    { path: '/a/c', order: 0 }
];

の中へ:

var expected = [
    { path: '/a', order: 0 },
    { path: '/a/c', order: 0 },
    { path: '/a/d', order: 1 },
    { path: '/b', order: 1 }
];

階層データに関する素晴らしい投稿を見つけました。

リレーショナル データベースに階層データを格納するためのオプションは何ですか?

その質問から、私はフラットテーブルを使用していると思います:

各レコードにレベルとランク (順序付けなど) 列を追加する隣接リストの変更。

そのSOの質問のリンクがダウンしているため、それ以上の情報を取得できません。

ソート機能をアサートするために JsFiddle をセットアップします。

http://jsfiddle.net/U76ch/

すでにいくつかのアプローチを試しましたが、どれも正しい結果をもたらしませんでした。

まったく別の解決策は、順序を追加してアルファベット順に並べ替えることです。しかし、結果は URL として終わるので、www.example.com/01-products/01-snowboard を持つのはちょっと見苦しいです。

アップデート

私がやろうとしていることを示すために、より複雑な JSFiddle の例を作成しました。

http://jsfiddle.net/YSd3d/

そのため、パスでソートしようとしていますが、ノードはそのレベルで順番にソートする必要があります。アルファベット順に並べ替えた場合のファイル システムのように、最後の子は順番に並べ替えられます。

4

2 に答える 2

4
var data = [
    { path: '/a', order: 0 },
    { path: '/b', order: 1 },
    { path: '/a/d', order: 1 },
    { path: '/a/c', order: 0 }
];

data.sort(function(a, b) {
  if (a.path === b.path) {
    return a.order < b.order ? -1 : 1;
  } else {
    return a.path < b.path ? -1 : 1;
  };
});
于 2012-07-01T12:47:12.477 に答える
0

簡単な並べ替えはできますか?最後の段落でのあなたの懸念を完全には理解していません。

var result = data.sort(function (a, b) {
  return a.path > b.path;
});

http://jsfiddle.net/sftdq/


編集。テストを変更して、順序> abcを表示しました。jsfiddleの例で動作します

var data = [
    { path: '/a', order: 0 },
    { path: '/b', order: 1 },
    { path: '/a/a', order: 1 },
    { path: '/a/c', order: 0 }
];


var result = data.sort(function (a, b) {
    if( a.order === b.order ){
        return a.path > b.path;
    }
    else {
        return a.order > b.order;
    }
});


var expected = [
    { path: '/a', order: 0 },
    { path: '/a/c', order: 0 },
    { path: '/a/a', order: 1 },
    { path: '/b', order: 1 }
];


if (_.isEqual(result, expected)) {
    alert('Success');       
} else {
    alert('Failed');  
};
​
于 2012-07-01T12:46:01.277 に答える