这个排序例程有什么问题?
-
22-12-2019 - |
题
我有一个包含字符串描述的 JavaScript 对象数组。我正在尝试实现一种简化的排序算法,该算法将删除大小写,删除 HTML 标签,然后删除除字母和数字之外的所有内容。我有:
DASHBOARD.todo_entries.sort(function(first, second)
{
var first_workbench = first.description.toLowerCase();
var second_workbench = second.description.toLowerCase();
first_workbench = first_workbench.replace(/<.*?>/, '');
second_workbench = second_workbench.replace(/<.*?>/, '');
first_workbench = first_workbench.replace(/[^_\w]/, '');
second_workbench = second_workbench.replace(/[^_\w]/, '');
console.log('"' + first_workbench + '", "' + second_workbench + '"');
return (first_workbench > second_workbench);
});
目前,它始终生成一个排序顺序,其中包含以下描述:
Testing: d.
Testing: e.
Test: a.
Testing: f.
Test: c.
Test: b.
Testing: g.
Testing: b.
Testing: a.
Test: d.
Testing: c.
Testing: h.
Testing: i.
Testing: j.
Testing: k.
Testing: l.
我期望发生的是它会有“测试:[a-d]”按顺序出现,然后是“测试:[a-l]”按顺序出现。
我不确定如何编写自然生成此订单的代码;它与他们的创建顺序不匹配(我认为“测试:”的创建时间/顺序[a-d]”和“测试:[a-l]”重叠,但它们是按顺序单独创建的)。
如果我只是设置函数将未更改的描述与 < 或 > 进行比较,我会得到类似但不相同的结果。至少在“测试”/“测试”中,未改变的词典搜索应该与我想要的搜索结果一致。我对我的代码进行了一些搜索,没有发现任何其他明显篡改该数组顺序的内容。
有什么东西跳出来是错误的吗?
谢谢,
解决方案
JS Array.sort
方法采用比较器函数 cmp(a, b)
应该返回 1
或另一个正数(表示 a < b
), -1
或另一个负数(表示 b > a
), 或者 0
(表示等效值)-参见 MDN 文档. 。你的返回一个布尔值,仅有效 1
或者 0
, ,所以它不会正确排序。
尝试
return first_workbench === second_workbench ? 0 :
first_workbench > second_workbench ? 1 : -1;
或类似的。
不隶属于 StackOverflow