的重新排序数组

Re-sorting array

本文关键字:排序 数组 新排序      更新时间:2023-09-26

我不知道为什么排序在这种情况下不起作用:

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/

差异在哪里?

可能是因为你的比较函数是错误的。如果a> b,比较函数必须返回1,如果a <如果a> b则返回true,如果a <= b则返回false(0)。所以当a <B,排序函数认为项是相等的。>

正确的排序方法是:

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