我有一个包含字符串描述的 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;

或类似的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top