Javascript jQuery-创建一个简单的字母数字.sort()

Javascript jQuery-创建一个简单的字母数字.sort(),javascript,jquery,sorting,Javascript,Jquery,Sorting,我有一个函数可以进行基本的数字排序,但我希望能像这样对字母数字数据进行排序: 1 Alpha 2 Beta 3 Delta Romeo 1 Romeo2 Romeo 3 您可以运行下面的代码,也可以使用小提琴,现在只有Age按钮工作,Name和Room不工作。 函数clientSort(列、方向) { var$divs=$(“.client”); 如果(方向=='asc') { var alphaDivs=$divs.sort(函数(a,b){ 返回$(a).数据(列)-(b).数据(列)

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

1 Alpha
2 Beta
3 Delta
Romeo 1
Romeo2
Romeo 3
您可以运行下面的代码,也可以使用小提琴,现在只有
Age
按钮工作,
Name
Room
不工作。

函数clientSort(列、方向)
{
var$divs=$(“.client”);
如果(方向=='asc')
{
var alphaDivs=$divs.sort(函数(a,b){
返回$(a).数据(列)-(b).数据(列);
});
$(“.list”).html(alphaDivs);
}
其他的
{
如果(方向=='desc')
{
var alphaDivs=$divs.sort(函数(a,b){
返回$(b).数据(列)-(a).数据(列);
});
$(“.list”).html(alphaDivs);
}
}
}
$(文档).ready(函数()
{
$('.sort_clients')。单击(函数(e)
{
var column=$(this.data('column');
var direction=$(this.data('direction');
控制台日志(列+“”+方向);
如果(方向=='asc')
{
$(this).data('direction','desc');
}
其他的
{
$(this).data('direction','asc');
}
clientSort(列、方向);
});
});

名称
年龄
房间
约翰,50,1阿尔法
苏珊,84岁,2岁
布拉德,70岁,3岁
玛格丽特,45岁,罗密欧一号
斯蒂芬,75岁,罗密欧3号
马特,65岁,罗密欧

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


布拉德也是一个打字错误。

给你,这是一个简单而优雅的完成方法

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));
var列表项=['ABAA','bbbbbbb','AAA'];
排序(函数(a,b){
var-compA=a;
var compB=b;
返回(compAcompB)?1:0;
})
log(JSON.stringify(listitems));
当然,您可以在排序函数中修改您的返回

函数clientSort(列、方向)
{
var$divs=$(“.client”);
如果(方向=='asc')
{
var alphaDivs=$divs.sort(函数(a,b){
返回($(a).数据(列)<$(b).数据(列))?-1:($(a).数据(列)>$(b).数据(列))?1:0;
});
$(“.list”).html(alphaDivs);
}
其他的
{
如果(方向=='desc')
{
var alphaDivs=$divs.sort(函数(b,a){
返回($(a).数据(列)<$(b).数据(列))?-1:($(a).数据(列)>$(b).数据(列))?1:0;
});
$(“.list”).html(alphaDivs);
}
}
}
$(文档).ready(函数()
{
$('.sort_clients')。单击(函数(e)
{
var column=$(this.data('column');
var direction=$(this.data('direction');
控制台日志(列+“”+方向);
如果(方向=='asc')
{
$(this).data('direction','desc');
}
其他的
{
$(this).data('direction','asc');
}
clientSort(列、方向);
});
});

名称
年龄
房间
约翰,50,1阿尔法
苏珊,84岁,2岁
布拉德,70岁,3岁
玛格丽特,45岁,罗密欧一号
斯蒂芬,75岁,罗密欧3号
马特,65岁,罗密欧

您的排序标准是什么以及预期的结果是什么?很抱歉,我没有遵循,将其更改为strA>strB或反之亦然都没有帮助。您认为
strA-strB
将返回什么?格式是
NUMBER[SPACE]STRING
STRING[SPACE]NUMBER
?您不需要使用localCompare,您可以使用
:@freedomn-m对所有字符串都不起作用:谢谢,起初我认为这解决了我的问题,在我提供的数据样本集中它确实起作用,但在对更大的数据样本进行测试时,它崩溃了。也许你知道如何解决这个问题,但我一直认为localCompare不是一个函数。我试图用toString()修复错误,但排序结果很奇怪,显然有些东西工作不正常。这里更新了我的小提琴,我可以看看它是如何工作的吗?:)我已经添加到演示中并在您的小提琴中分叉,您将data name=“brad”误输入为data name=“nrad”,因此请检查,这可能会导致无法正确排序。
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));