首页 > 解决方案 > 我做了一个简单的排序功能,但它不起作用

问题描述

我做了一个简单的排序函数,但由于某种原因它仍然返回原始列表。

function sortByPopular (item) {
    let items_sold = item.slice();

    items_sold.sort(function(a,b) {
        return a.quantity_sold > b.quantity_sold;
    });
 
    loadPopularItems("popular-items", items_sold); //this sends it to the html
}

标签: javascripthtmlnode.jsjson

解决方案


回调函数需要返回一个区分三种状态的数字,而不是布尔值:

  • 如果两个元素排序相等,则返回 0
  • 如果 a 应该在 b之前排序,则返回任何小于0的数字
  • 如果 a 应该b 之后排序,则返回任何大于0的数字

如果 quantity_sold 属性是一个数字,您可以简单地执行此操作:return a.quantity_sold - b.quantity_sold;

如果不是数字,则需要适当的 if 语句:

if ( a.quantity_sold > b.quantity_sold ) {
    return -1;
}
elseif ( a.quantity_sold < b.quantity_sold ) {
    return 1;
}
else {
    return 0;
}

推荐阅读