提问者:小点点

Javascript排序列表仅适用于


我正在尝试实现一个类似问题的系统。这些问题应该根据数据属性“投票”重新排序。因此,每次从套接字接收到like事件时,都会调用sort函数。当一个问题第一次被喜欢时,所有的事情都很好,列表也被排序了。但它会停止排序。我已经检查了数据值。

下面是我的js功能:

function sortQuestionList() {
  $('#questionList li').sort(sort_li).appendTo('#questionList');
        
  function sort_li(a, b) {
    return ($(b).data('vote')) < ($(a).data('vote')) ? -1 : 1;
  }
}

共2个答案

匿名用户

您的sort_li函数不返回sort期望的值。它应该返回:

  • 如果AB
  • 之前,则为负数
  • 如果BA
  • 之前,则为正数
  • 如果相同则为零

您的代码没有做最后一件事。这使得sort无法正确执行其工作。

相反:

function sortQuestionList() {
    $("#questionList li").sort(sort_li).appendTo("#questionList");
          
    function sort_li(a, b) {
        return $(a).data("vote") - $(b).data("vote");  // ***
    }
}

(假设vote的值是数值。)

匿名用户

您的排序函数正常工作。但是,它并不稳定。你应该写

  function sort_li(a, b) {
    return $(b).data("vote") - $(a).data("vote");
  }

不管怎样,这不是你的问题。我在这里举了一个例子,它工作得很好:https://codesandbox.io/s/sort-questions-stackoverlow-49hvi?file=/src/index.js

您提供的代码不是问题的根源。没有一个不起作用的例子,我们无法提供任何进一步的帮助。请制作一个最小的笔或CodeSandBox。

我能说的就是:确保每次更新列表项时都调用sort函数。确保没有其他函数覆盖这些更改。确保您使用了正确的属性('data-votes'而不是'votes')。