我有一个包含数字和字符串的列表。
列表中的每个元素都类似于:
{
'name': 'Bob',
'number': 234234
}
但是,名字或号码可能都会丢失。
在我的排序中,我做了类似的事情:
_.sortBy(list, function(element) {
if (element.name) {
return element.name;
}
else {
return element.number;
}
});
在没有它的情况下,元素前面的元素排序。我如何获得lodash去优先考虑数字?
答案 0 :(得分:1)
我猜你的意思就是_.sortBy按升序排名?
sortBy_.sortBy(list,iteratee,[context])返回(稳定)排序 列表副本,按运行结果按升序排列 通过iteratee的价值。 iteratee也可以是。的字符串名称 按(例如长度)排序的属性。
http://underscorejs.org/#sortBy
因此,在优先考虑element.name
时,它会在排序中显示在最后。
您可以简单地反转生成的数组
results = results.reverse();
或者,更改if/else
声明的顺序。
答案 1 :(得分:1)
_.sortBy
正在使用返回值来创建具有criteria
属性的对象。该criteria
属性是与array.sort
函数和ad hoc
进行比较的值,而不是可配置的comparer
函数。
我猜你可以破解这个,返回一个像:
这样的值 _.sortBy(list, function(element) {
if (element.name) {
return "@" + element.name;
}
else {
return element.number;
}
};
答案 2 :(得分:1)
听起来可能更容易拆分清单,对零件进行分类并将其重新组合在一起,即:
_(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