【问题标题】:jQuery - Creating a simple alphanumeric .sort() [duplicate]jQuery - 创建一个简单的字母数字 .sort() [重复]
【发布时间】:2020-11-03 17:06:15
【问题描述】:

我有一个可以进行基本数字排序的函数,但我想要一些可以像这样对字母数字数据进行排序的函数:

1 Alpha
2 Beta
3 Delta
Romeo 1
Romeo2
Romeo 3

你可以运行下面的代码,或者有一个小提琴,现在只有 Age 按钮在工作,NameRoom 不工作。 https://jsfiddle.net/goldencarers/hfy7wega/

function clientSort(column,direction)
{
  var $divs = $(".client");

  if (direction=='asc')
  {
    var alphaDivs = $divs.sort(function (a, b) {
      return $(a).data(column) - $(b).data(column);
    });
    $(".list").html(alphaDivs);
  }
  else
  {
    if (direction=='desc')
    {
      var alphaDivs = $divs.sort(function (a, b) {
        return $(b).data(column) - $(a).data(column);
      });
      $(".list").html(alphaDivs);
    }
  }
}

$(document).ready(function()
{
  $('.sort_clients').click(function(e)
                           {
    var column = $(this).data('column');
    var direction = $(this).data('direction');
    
    console.log(column + ' ' + direction);
      
    if(direction === 'asc')
    {
      $(this).data('direction', 'desc');
    }
    else
    {
      $(this).data('direction', 'asc');
    }
    clientSort(column,direction);
  });
  
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<button class="sort_clients" data-column="name" data-direction="asc">Name</button>
<button class="sort_clients" data-column="age" data-direction="asc">Age</button>
<button class="sort_clients" data-column="room" data-direction="asc">Room</button>

<div class="list">
  <div class="client" data-name="john" data-age="50" data-room="1 Alpha">John, 50, 1 Alpha</div>
  <div class="client" data-name="susan" data-age="80" data-room="2 Beta">Susan, 84, 2 Beta</div>
  <div class="client" data-name="brad" data-age="70" data-room="3 Delta">Brad, 70, 3 Delta</div>
  <div class="client" data-name="margaret" data-age="45" data-room="Romeo 1">Margaret, 45, Romeo 1</div>
  <div class="client" data-name="steph" data-age="75" data-room="Romeo 3">Steph, 75, Romeo 3</div>
  <div class="client" data-name="matt" data-age="65" data-room="Romeo2">Matt, 65, Romeo2</div>
</div>

【问题讨论】:

  • 您的排序标准是什么?预期结果是什么?
  • 抱歉,我没听懂,据我所知,将其更改为 strA > strB 或反之亦然无济于事。
  • 认为strA - strB会返回什么?
  • 格式是NUMBER[SPACE]STRINGSTRING[SPACE]NUMBER吗?

标签: javascript jquery sorting


【解决方案1】:

https://jsfiddle.net/r1hzc3ny/

  return $(a).data(column).localeCompare($(b).data(column));

您需要使用 localCompare 来比较两个字符串。

brad 也是一个错字。

【讨论】:

  • 你不需要使用localCompare,你可以使用&lt;&gt;:stackoverflow.com/a/6712080/2181514
  • @freedomn-m 不适用于所有字符串:stackoverflow.com/questions/6712034/…
  • 谢谢,最初我认为这解决了我的问题,并且它在我提供的数据样本集中确实有效,但是在针对更大的数据样本进行测试时,它会崩溃。也许你知道如何解决这个问题,但我不断得到 localCompare 不是一个函数。我试图用 toString() 修复错误,但排序结果很奇怪,很明显有些东西不能正常工作。在这里更新jsfiddle.net/goldencarers/hfy7wega/17
【解决方案2】:

给你,一个简单而优雅的完成方式。

var listitems = ['ABAA','BBBBB','AAA'];
listitems.sort(function(a, b) {
   var compA = a;
   var compB = b;
   return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
})


console.log(JSON.stringify(listitems));

当然,您可以在排序函数中修改返回值。

function clientSort(column,direction)
{
  var $divs = $(".client");

  if (direction=='asc')
  {
    var alphaDivs = $divs.sort(function (a, b) {
       return ($(a).data(column) < $(b).data(column)) ? -1 : ($(a).data(column) > $(b).data(column)) ? 1 : 0;
    });
    $(".list").html(alphaDivs);
  }
  else
  {
    if (direction=='desc')
    {
      var alphaDivs = $divs.sort(function (b, a) { 
        return ($(a).data(column) < $(b).data(column)) ? -1 : ($(a).data(column) > $(b).data(column)) ? 1 : 0;
      });
      $(".list").html(alphaDivs);
    }
  }
}

$(document).ready(function()
{
  $('.sort_clients').click(function(e)
                           {
    var column = $(this).data('column');
    var direction = $(this).data('direction');
    
    console.log(column + ' ' + direction);
      
    if(direction === 'asc')
    {
      $(this).data('direction', 'desc');
    }
    else
    {
      $(this).data('direction', 'asc');
    }
    clientSort(column,direction);
  });
  
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<button class="sort_clients" data-column="name" data-direction="asc">Name</button>
<button class="sort_clients" data-column="age" data-direction="asc">Age</button>
<button class="sort_clients" data-column="room" data-direction="asc">Room</button>

<div class="list">
  <div class="client" data-name="john" data-age="50" data-room="1 Alpha">John, 50, 1 Alpha</div>
  <div class="client" data-name="susan" data-age="80" data-room="2 Beta">Susan, 84, 2 Beta</div>
  <div class="client" data-name="brad" data-age="70" data-room="3 Delta">Brad, 70, 3 Delta</div>
  <div class="client" data-name="margaret" data-age="45" data-room="Romeo 1">Margaret, 45, Romeo 1</div>
  <div class="client" data-name="steph" data-age="75" data-room="Romeo 3">Steph, 75, Romeo 3</div>
  <div class="client" data-name="matt" data-age="65" data-room="Romeo2">Matt, 65, Romeo2</div>
</div>

check this demo

【讨论】:

  • 照顾我的小提琴,这样我就可以看到它是如何工作的? :)
  • 我已添加到演示并分叉
  • 在您的小提琴中,您将 data-name="brad" 输入错误为 data-name="nrad" 所以请检查一下,这可能会导致无法正确排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 2017-08-14
  • 2013-03-25
  • 2015-06-13
  • 2020-08-27
  • 1970-01-01
相关资源
最近更新 更多