可能让你重新排序的指标:在Underscore.js中使用sortBy和sortByOrder

当我们需要对一个数组进行排序时,通常会使用JavaScript内置的 sort 函数。但是,如果我们希望根据特定的指标来排序,该怎么办呢?这时候就可以考虑使用Underscore.js提供的 sortBysortByOrder 函数。

sortBy函数

sortBy 函数接受两个参数:待排序的数组和一个迭代器函数。迭代器函数用于从数组中提取每个元素的排序指标,它应该返回一个数字、字符串或者其他可比较类型的值。下面是一个示例:

----- ---- - -
  - ----- -------- ---- -- --
  - ----- ------ ---- -- --
  - ----- ---------- ---- -- -
--

----- ---------- - -------------- ------ -- ----------

------------------------
-- ------- -- ----- ------ ---- -- -- - ----- -------- ---- -- -- - ----- ---------- ---- -- --

在上面的示例中,我们根据每个对象的 age 属性来进行排序。

需要注意的是,如果迭代器函数返回的是一个字符串,那么排序将会按照字典序进行。如果要进行反向排序,则可以用 - 符号将迭代器函数的返回值取负数,例如:

----- ---- - ----- ---- -----

----- ---------- - -------------- ------ -- -------

------------------------
-- ------- ----- ---- ----

sortByOrder函数

sortByOrder 函数与 sortBy 函数类似,不同的是它可以指定排序的方向。第二个参数是一个字符串数组,用于指定排序的顺序。每个字符串表示一个排序指标,前面加上 - 表示按照降序进行排序。下面是一个示例:

----- ---- - -
  - ----- -------- ---- -- --
  - ----- ------ ---- -- --
  - ----- ---------- ---- -- -
--

----- ---------- - ------------------- ------- ----------

------------------------
-- ------- -- ----- ------ ---- -- -- - ----- -------- ---- -- -- - ----- ---------- ---- -- --

在上面的示例中,我们首先根据 age 属性进行升序排序,然后在相同 age 值的元素中再按照 name 属性进行降序排序。

需要注意的是,如果对于某个元素,所有指标都相同,那么它们的顺序可能是不确定的。为了避免这种情况,可以在最后再添加一个唯一的排序指标,例如:

----- ---- - -
  - ----- -------- ---- -- --
  - ----- ------ ---- -- --
  - ----- ---------- ---- -- -
--

----- ---------- - ------------------- ------- -------- -------

------------------------
-- ------- -- ----- ------ ---- --- --- - -- - ----- -------- ---- --- --- - -- - ----- ---------- ---- --- --- - --

在上面的示例中,我们添加了一个名为 id 的属性作为最后的排序指标,以保证排序结果的确定性。

总结

使用Underscore.js提供的 sortBysortByOrder 函数可以方便地进行复杂的排序操作。需要注意的是,为了保证排序结果的确定性,应该定义好唯一的排序指标。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/11658