我正在尝试按属性对对象进行排序。我的功能在Opera和IE上有问题。直到现在,我已经在这个阶段调试了Opera的问题:
在控制台中传递此代码,然后按shift + enter。
var DataArray=["Other","Attitude","Attitude","Delivery/timings","General Performance","Personal Planning","Other"]
DataArray=DataArray.sort(function(a,b)
{
return a<b;
});
JSON.stringify(DataArray);
你应该得到这样的正确结果:
[“个人计划”,“其他”,“其他”,“一般表现”,“交付/时间”,“态度”,“态度”]
现在以这种方式改变排序功能a> b,然后按Enter + shift来执行它。
var DataArray=["Other","Attitude","Attitude","Delivery/timings","General Performance","Personal Planning","Other"]
DataArray=DataArray.sort(function(a,b)
{
return a>b;
});
JSON.stringify(DataArray);
我的结果是:
[“Attitude”,“Delivery / timing”,“Attitude”,“General Performance”,“Other”,“Other”,“Personal Planning”]
注意第一个,第二个和第三个值?发生了什么?
如果您在控制台“Attitude”=“Attitude”中执行此操作,则返回true ...
有什么想法吗?
提前致谢。
编辑: 与IE的部分:
CODE:
var DataArray=['Other','Attitude','Attitude','Delivery/timings','General Performance','Personal Planning','Other'];
DataArray=DataArray.sort(function(a,b)
{
return a<b;
});
prompt('',DataArray);
结果(正确):个人计划,其他,其他,一般表现,态度,态度,交付/时间
CODE:
var DataArray = ['其他','态度','态度','交付/时间','一般表现','个人计划','其他'];
DataArray=DataArray.sort(function(a,b)
{
return a>b;
});
prompt('',DataArray);
结果(不正确):态度,态度,其他,交付/时间,一般表现,其他,个人计划
解决方案:
sortableArray=sortableArray.sort(function(a,b)
{
if(a.Category>b.Category)
{
return 1;
}
if(a.Category<b.Category)
{
return -1;
}
return 0;
});
要按降序排序数据,请使用reverse()函数。
感谢您的帮助。特别是@nnnnnn
答案 0 :(得分:5)
这不是任何特定浏览器的问题,没有阅读.sort()
function documentation是一个问题。你传递给.sort()
的回调不应该返回一个布尔值,它应该返回一个数字:
答案 1 :(得分:4)
您的排序函数返回一个布尔值,而它应该返回一个整数。虽然1
可能会被true
和0
混淆为false
,但这不应该是您依赖代码逻辑的东西。该函数应该有3个返回案例:
< 0
if a > b
> 0
if a < b
== 0
if a == b
所以你应该像这样对数组进行排序:
DataArray = DataArray.sort(function(a,b){
return a>b ? 1 : a<b ? -1 : 0;
});