下划线:基于多个属性进行sortBy()排序

121

我正在尝试根据多个属性对对象数组进行排序。例如,如果两个对象之间的第一个属性相同,则应使用第二个属性来比较这两个对象。例如,考虑以下数组:

var patients = [
             [{name: 'John', roomNumber: 1, bedNumber: 1}],
             [{name: 'Lisa', roomNumber: 1, bedNumber: 2}],
             [{name: 'Chris', roomNumber: 2, bedNumber: 1}],
             [{name: 'Omar', roomNumber: 3, bedNumber: 1}]
               ];

按照 roomNumber 属性排序,我会使用以下代码:

var sortedArray = _.sortBy(patients, function(patient) {
    return patient[0].roomNumber;
});

这个方法可以正常工作,但我该如何进行操作,以便 'John' 和 'Lisa' 能够正确排序?

12个回答

1
你可以在迭代器中连接你想要排序的属性:
return [patient[0].roomNumber,patient[0].name].join('|');

或者等价物。

注意:由于您将数字属性roomNumber转换为字符串,如果您有房间号> 10,则必须执行某些操作。否则,11将排在2之前。您可以使用前导零填充来解决问题,即使用01而不是1。


0

如果你正在使用Angular,你可以在HTML文件中使用它的数字过滤器,而不必添加任何JS或CSS处理程序。例如:

  No fractions: <span>{{val | number:0}}</span><br>

在这个例子中,如果val = 1234567,它将被显示为
  No fractions: 1,234,567

示例和进一步指导请参见: https://docs.angularjs.org/api/ng/filter/number


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接