3

私はこの非常に単純なソート方法を持っています:

sortByNumericAttr : function (a, b,attr){            
        a = a[attr];
        b = b[attr];
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

ここでの考え方は、並べ替えが必要な属性(id、typeなど)が異なるさまざまなオブジェクトがあるため、それぞれに異なる並べ替え関数を記述するのではなく(すべての違いは並べ替えられた属性のみである)、次のように記述します。汎用メソッドを作成し、それに属性を渡します。

したがって、このように記述されている場合は、次のように呼び出すことができます。

arr.sort(utils.sortByNumericAttr,'typeId');

この機能に基づいて、どうすればこれまたは同様の効果を達成できますか?

4

2 に答える 2

8

別の関数を使用して関数を作成できます。

function sort_by(attr) {
    return function(o1, o2) {
        var a = o1[attr];
        var b = o2[attr];

        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    };
}

そしてそれをのように呼びます.sort(sort_by('id'))

于 2013-02-13T08:11:12.583 に答える
0

このようなリストがある場合:

var list = [
    {id:5, color:"Green", name:"Audi"},
    {id:1, color:"Red", name:"Ferrari"},
    {id:3, color:"Silver", name:"Mercedes"}
];

ソート関数を作成して、使用されているキーごとにこのリストをソートできます。

function sortById(a,b) { return (a.id-b.id); }
list.sort(sortById);

function sortByName(a,b) { return (a.name.localeCompare(b.name)); }
list.sort(sortByName);

function sortByColor(a,b) { return (a.color.localeCompare(b.color)); }
list.sort(sortByColor);
于 2013-02-13T08:20:06.753 に答える