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解决方案长得多。我现在可以保持这种方式,但如果有人有更好的想法,我也会很感激。你的预期输出是什么?所有有名称的实体,按名称排序,然后是所有有编号的条目,按编号排序?