javascript - 这个排序例程有什么问题?

标签 javascript sorting lexicographic

我有一个包含字符串描述的 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 值,仅有效 10 ,因此无法正确排序。

尝试

return first_workbench === second_workbench ? 0 :
    first_workbench > second_workbench ? 1 : -1;

或类似的。

关于javascript - 这个排序例程有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21056302/

相关文章:

algorithm - 是否可以在 O(N) 中重新排列数组?

c - 在 C 中对链表进行排序

C - 按字典顺序的递归排列

javascript - 如何访问 Angular.js Controller 中的选定选项

javascript - 当客户从另一台计算机(使用 Rails)添加预订时,如何让页面显示预订更新?

javascript - Node.js - 限制直接访问服务器?仅当来自其他页面并且存在表单 POST 变量时才允许/加载

sorting - Powershell 对带下划线的字符串进行排序

javascript - JQuery 日期选择器语言无法正常工作

string - Duval 的算法如何处理奇数长度的字符串?

python - 所有按字典顺序排列的可变字符串的迭代器,长度不超过 n