Javascript lodash sortby,如何在字母之后排序数字?

Javascript lodash sortby,如何在字母之后排序数字?,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,我有一个列表,里面有数字和字符串 列表中的每个元素都类似于: { 'name': 'Bob', 'number': 234234 } 但是,可能缺少姓名或号码 在我的肮脏中,我做了这样的事情: _.sortBy(list, function(element) { if (element.name) { return element.name; } else { return element.number; } }); 这将对元素进行排序,在不带数字的元

我有一个列表,里面有数字和字符串

列表中的每个元素都类似于:

{
  'name': 'Bob',
  'number': 234234
}
但是,可能缺少姓名或号码

在我的肮脏中,我做了这样的事情:

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

这将对元素进行排序,在不带数字的元素前面加上数字。我如何让洛达斯去区分数字的优先级?

我想你的意思很简单,就是按升序排序

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

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

您可以简单地反转生成的数组

results = results.reverse();

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

\u0。sortBy
使用返回值创建具有
条件的对象。该
criteria
属性是要与
array.sort
函数和一个不可配置的
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

您愿意使用本机JavaScript解决方案,还是希望继续使用lodash?我使用.sort()函数找到了一个本机JS解决方案,但它最终比sortBy解决方案长得多。我现在可以保持这种方式,但如果有人有更好的想法,我也会很感激。你的预期输出是什么?所有有名称的实体,按名称排序,然后是所有有编号的条目,按编号排序?