【发布时间】:2012-01-07 21:46:12
【问题描述】:
我正在尝试按那里的属性对对象进行排序。我的功能在 Opera 和 IE 上有问题。到目前为止,我已经在这个阶段调试了Opera上的问题:
- 打开“Opera 浏览器”并按 cntr+shift+i。选择控制台。
-
在控制台中传递此代码,然后按 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”="Attitude" 中执行此操作,则返回 true...
有什么想法吗?
提前致谢。
编辑: 以及带有 IE 的部分:
代码:
var DataArray=['Other','Attitude','Attitude','Delivery/timings','General Performance','Personal Planning','Other'];
DataArray=DataArray.sort(function(a,b)
{
return a<b;
});
prompt('',DataArray);
结果(正确):个人计划,其他,其他,一般表现,态度,态度,交货/时机
代码:
var DataArray=['Other','Attitude','Attitude','Delivery/timings','General Performance','Personal Planning','Other'];
DataArray=DataArray.sort(function(a,b)
{
return a>b;
});
prompt('',DataArray);
RESULT(不正确):态度、态度、其他、交货/时间安排、一般表现、其他、个人计划
解决方案:
sortableArray=sortableArray.sort(function(a,b)
{
if(a.Category>b.Category)
{
return 1;
}
if(a.Category<b.Category)
{
return -1;
}
return 0;
});
使用 reverse() 函数对数据进行降序排序。
感谢您的帮助。特别是@nnnnnn
【问题讨论】:
-
可能不相关,但
sort()将就地对数组进行排序 - 您无需将其分配回变量。 -
这是真的,但在我的实际情况中,我使用它来按属性对对象进行排序: sortableArray=sortableArray.sort(function(a,b) { return a.Category>b.Category; } );我刚刚调试了这个。
-
IE8没问题,结果是:
["Attitude", "Attitude", "Delivery/timings", "General Performance", "Other", "Other", "Personal Planning"]。 (您可以使用此jsfiddle 进行测试)。 -
请在发布前发布真实代码和RTFM。
sort方法有据可查。
标签: javascript internet-explorer sorting opera