重新排序数组

时间:2016-09-07 10:17:03

标签: javascript arrays sorting object

我不知道为什么排序不适用于这种情况:

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 个答案:

答案 0 :(得分:1)

可能是因为你的比较功能错了。如果a>>则比较函数必须返回1。 b,-1如果a< b,如果a == b,则为0。如果>您的方法返回true b,如果a< = 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()