我有一个包含字符串描述的 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 docs 。你的返回一个 bool 值,仅有效 1
或0
,因此无法正确排序。
尝试
return first_workbench === second_workbench ? 0 :
first_workbench > second_workbench ? 1 : -1;
或类似的。
关于javascript - 这个排序例程有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21056302/