我从服务器获取数据,有些项目具有特定的属性,而另一些则没有。我需要根据此特定属性对数据进行排序,并且我使用的是 sortBy 包,但是它当然不能正常工作,因为它在尝试对数据进行排序时并没有找到该属性,它已损坏。
myItems.sort(sortBy('specificAttr'))
基本上,我做了什么(想想一个循环内):
if(!myItems.specificAttr) {myItems.speficificAttr = 0);
我知道这根本没有道理,但我不知道我能做什么。
您对代码示例有何建议?
答案 0 :(得分:0)
sortBy
Lodash开箱即用地处理这种情况。如果找不到该属性,它将被推到排序数组的末尾。
var users = [
{ 'age': 48 },
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'barney', 'age': 34 }
];
_.sortBy(users, [(o) => { return o.user; }]);
// => objects for barney, barney, fred, and no-name in that order
_.sortBy(users, ['user']);
// => objects for barney, barney, fred, and no-name in that order
如果您使用的是其他库的sortBy
,请查看文档以查看是否存在可选的第二个参数,该参数可让您自定义属性getter函数。
如果您要实现自己的排序算法,只需进行if myItem.specificAttr
之类的检查即可在进行实际排序时检查该属性是否存在(而不是如示例中所描述的那样进行先前的排序)