3

基本的に、オブジェクトの配列をプロパティでソートしようとしています。

配列内に 3 つのオブジェクトがあり、それぞれにプロパティがあるとします。views

var objs = [
    {
        views: '17'
    },
    {
        views: '6'
    },
    {
        views: '2'
    }
];

配列で sort メソッドを使用するobjs:

function sortByProperty(property) {
    return function (a,b) {
        /* Split over two lines for readability */
        return (a[property] < b[property]) ? -1 : 
               (a[property] > b[property]) ? 1 : 0;
    }
}


objs.sort(sortByProperty('views'));

objs基本的には逆順になると思いますが、'17'は 未満 と として扱われているよう'6'です'2'。これはおそらく'1'.

この問題を解決するためのアイデアはありますか?

各オブジェクトを反復処理して整数に変換できることはわかっていますが、それを回避する方法はありますか?

JSFiddle: http://jsfiddle.net/CY2uM/

4

3 に答える 3

3

Javascript はやや型付けされた言語です。文字列の<場合はアルファベット順、数値の場合は数値ソートを意味します。唯一の方法は、値を数値に変換することです。ここでは単項演算子 + が役立ちます。したがって、試してみてください

function sortByNumericProperty(property) {
    return function (a,b) {
        var av = +a[property], bv = +b[property];
        /* Split over two lines for readability */
        return (av < bv) ? -1 : 
               (av > bv) ? 1 : 0;
    }
}

しかし、一般的に一般的なイディオム ( MDN にも記載されています)

function sortByNumericProperty(property) {
    return function (a,b) {
        return a[property] - b[property];
    }
}

また、動作するはずです。

于 2013-08-18T17:00:29.657 に答える
2

a[property]およびb[property]数値に解析できる場合

function sortByProperty(property) {
    return function (a,b) {
            return a[property] - b[property];
    }
}
于 2013-08-18T17:00:14.350 に答える
0

使用する前に、値を整数に変換する必要がある場合があります-

function sortByProperty(property) {
    return function (a,b) {
        var x = parseInt(a[property]);  
        var y = parseInt(b[property])
        /* Split over two lines for readability */
        return (x < y) ? -1 : (x > y) ? 1 : 0;
    }
}
于 2013-08-18T16:56:37.890 に答える