2016-09-07 14 views
-2

ソートがこのケースで動作しない理由を私は知らない。再配列ソート

var articolo_generico = new Array(); 

var query_example= "select descrizione,quantita,prezzo from table"; 

      query_sqlite(query_example, function (result) { 

       var i = 0; 
       for (var index in result) { 

        var obj = result[index]; 

        //the object values are strings 
        articolo_generico[i] = {'descrizione': obj.descrizione, 'quantita': obj.quantita, 'prezzo': obj.prezzo}; 

        i++; 
        } 


       console.log("ARTICOLO GENERICO", articolo_generico); 

       articolo_generico = articolo_generico.sort(function (a, b) { 
        return a.descrizione > b.descrizione; 
       }); 

       console.log("ARTICOLO GENERICO AFTER SORTING", articolo_generico); 

}); 

が、この場合で作品を並べ替え...

var articolo_generico = new Array(); 
articolo_generico[0] = {'descrizione': 'pizza', 'quantita': 5, 'prezzo': 3.00}; 
articolo_generico[1] = {'descrizione': 'apfelstrudel', 'quantita': 5, 'prezzo': 3.10}; 
articolo_generico[2] = {'descrizione': 'mojito', 'quantita': 5, 'prezzo': 3.20}; 
articolo_generico[3] = {'descrizione': 'bacardi', 'quantita': 5, 'prezzo': 3.50}; 
articolo_generico = articolo_generico.sort(function(a,b) { return a.descrizione > b.descrizione }); 
console.log(articolo_generico); 

リンク:https://jsfiddle.net/sk5h6j6o/6/

違いはどこですか?

答えて

1

あなたの比較機能が間違っている可能性があります。比較関数は、a> bの場合は1を、<の場合は-1を返し、a == bの場合は0を返す必要があります。あなたのメソッドは、a> bの場合はtrueを、< = bの場合はfalse(0)を返します。したがって、< bの場合、sort関数はアイテムが等しいと考えます。

あなたの並べ替えを書くための正しい方法は次のとおりです。

articolo_generico.sort(function(a,b) { 
    if (a.descrizione > b.descrizione) return 1; 
    if (a.descrizione < b.descrizione) return -1; 
    return 0; 
}); 

は詳細についてArray.prototype.sort()を参照してください。