lodash-sortby,如何将数字排序晚于字母

lodash sortby, how to sort numbers later than letters?

本文关键字:排序 于字母 数字 lodash-sortby      更新时间:2023-09-26

我有一个包含数字和字符串的列表。

列表中的每个元素看起来都像:

{
  'name': 'Bob',
  'number': 234234
}

但是,可能缺少姓名或号码。

在我的排序中,我做了这样的事情:

_.sortBy(list, function(element) {
  if (element.name) {
    return element.name;
  }
  else {
    return element.number;
  }
});

这对前面有数字的元素和没有数字的元素进行排序。如何让lodash取消数字的优先级?

我想你的意思很简单,_.sortBy按升序排列

sortBy_.sortBy(list,iteratee,[context])返回(稳定)排序的列表副本,按运行结果升序排列值。iteratee也可以是要排序的属性(例如长度)。

http://underscorejs.org/#sortBy

因此,当您对element.name进行优先级排序时,它会出现在排序的最后

您可以简单地反转生成的阵列

results = results.reverse();

或者,更改if/else语句的顺序。

_.sortBy正在使用返回值创建具有criteria属性的对象。criteria属性是要与array.sort函数和ad hoc(不可配置的comparer函数)进行比较的值。

我想你可以破解这个,返回一个值,比如:

    _.sortBy(list, function(element) {
      if (element.name) {
        return "@" + element.name;
      }
      else {
        return element.number;
      }
    };

听起来拆分列表、对部分进行排序并重新组合可能更容易,即:

 _(data) //begin chain
    .filter("name") //the entries with names
    .sortBy("name") //sorted by name
    .concat(_.sortBy(_.reject(data, "name"), "number")) //followed by the entries without name, sorted by number
    .value(); //end chain