这种例行程序有什么问题?

时间:2014-01-10 23:21:14

标签: 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]”。

我不确定如何编写自然会生成此订单的内容;它与它们的创建顺序不匹配(我认为“Test:[a-d]”和“Testing:[a-l]”的创建时间/顺序重叠,但它们是按顺序单独创建的。)

如果我只是将函数设置为将未更改的描述与&lt;中的任何一个进行比较,那么结果会相似但不完全相同。或者&gt;。至少在“测试”/“测试”中,未经改动的词典搜索应该与我想要的搜索结果一致。我在我的代码中搜索了一下,没有找到任何明显篡改该数组顺序的内容。

什么事都错了?

谢谢,

1 个答案:

答案 0 :(得分:2)

JS Array.sort方法采用比较器函数cmp(a, b),该函数应返回1或另一个正数(表示a < b),-1或其他负数(表示b > a)或0(表示等效值) - 请参阅MDN docs。你的返回布尔值,实际上只有10,所以它不会正确排序。

尝试

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

或类似。

相关问题