0

私は配列オブジェクトを持っていますArrObject

object = {
    Active: true, // type: boolean
    Code: '12345'   // type: string
}

Activeこの配列をフィールドでソートしたいCode。でそれを行うには助けが必要ですunderscoreJs

アップデート

私のデータ:

data = [
{
    Code: "Code0",
    Description: "Description0",
    IsActive: true,
    id: 0
},
{
    Code: "Code1",
    Description: "Description1_edit",
    IsActive: true,
    id: 1
},
{
    Code: "Code5",
    Description: "Description5_edit",
    IsActive: false,
    id: 2
}]
4

3 に答える 3

2

コンパレーターは、このように連結された 2 つのフィールドに基づくことができます

var sorted = _.sortBy(ListObject, function (o) {
    return o.Active.toString() + '_' + o.Code;
});

(に基づく"True" > "False" <=> true > false)

于 2013-08-14T03:16:15.337 に答える
2

私はArray#sort単純なコンパレータ関数で使用します:

function cmp_bool(a, b) {
    return a == b ?  0
         : a      ? -1
         :          +1
}
function cmp_str(a, b) {
    return a == b ?  0
         : a <  b ? -1
         :          +1
}
function cmp(a, b) {
    return cmp_bool(a.IsActive, b.IsActive)
        || cmp_str( a.Code,     b.Code);
}

次に、これを簡単に行うことができます:

var sorted = data.sort(cmp);

Codeソート順を切り替える必要がある場合は、逆バージョンのcmp_str(たとえばcmp_str_reverse) と、代わりにcmpを使用するバージョンが必要です。cmp_str_reversecmp_str

使用する_.sortBy必要がある場合は、並べ替える値を考え出す必要があります。次のようなものです。

function combined(obj) {
    return (obj.IsActive ? 'a' : 'b')
         +  obj.Code;
}
var sorted = _(data).sortBy(combined);

Codeこれに関する問題は、順序を逆にするのがはるかに難しいことです。文字列の文字を少しいじることができると思いますが、6か月後のコードを見ると、何をしていたのか疑問に思うだけです。_.sortByは表記上の便利さです。手元にある便利なものにすべてを合わせる必要はありません。

デモ: http://jsfiddle.net/ambiguous/6tfcQ/

于 2013-08-14T04:29:29.967 に答える