基于两个属性对对象数组进行排序

时间:2021-02-24 11:45:55

标签: javascript angular typescript

我想根据 nameis_closed 对下面的数组进行排序。

this.rawDataListDup = [
    {id: 1, name: 'john','is_closed':true},
    {id: 2, name: 'james','is_closed':true},
    {id: 3, name: 'jane','is_closed':false},
    {id: 4, name: 'alex','is_closed':false},
    {id: 5, name: 'david','is_closed':true},
];

截至目前,我只能使用以下代码使用任何一个属性进行排序。

let colName = 'name'
this.rawDataListDup.sort((b, a) => a[colName] < b[colName] ? 1 : a[colName] > b[colName] ? -1 : 0)

我想要在数组顶部带有 is_closed = false 的数组对象,并且它应该在 Alphabetical order 中。像这样

this.rawDataListDup = [
    {id: 4, name: 'alex','is_closed':false},
    {id: 3, name: 'jane','is_closed':false},
    {id: 5, name: 'david','is_closed':true},
    {id: 2, name: 'james','is_closed':true},
    {id: 1, name: 'john','is_closed':true},
];

如何做到这一点?

3 个答案:

答案 0 :(得分:4)

您可以使用 sort 在 sort 中使用多个条件来执行此操作:

const rawDataListDup = [
    {id: 1, name: 'john','is_closed':true},
    {id: 2, name: 'james','is_closed':true},
    {id: 3, name: 'jane','is_closed':false},
    {id: 4, name: 'alex','is_closed':false},
    {id: 5, name: 'david','is_closed':true},
];

const sortedList = rawDataListDup.sort((a,b)=>(a.is_closed-b.is_closed) || a.name.localeCompare(b.name));

console.log(sortedList);

答案 1 :(得分:0)

它只是编写简单的代码。

const rawDataListDup = [
    {id: 1, name: 'john','is_closed':true},
    {id: 2, name: 'james','is_closed':true},
    {id: 3, name: 'jane','is_closed':false},
    {id: 4, name: 'alex','is_closed':false},
    {id: 5, name: 'david','is_closed':true},
];

rawDataListDup.sort(function(a, b) {
  return a.is_closed - b.is_closed  ||  a.name - b.name;
});
//OR 
    var obj = rawDataListDup.sort((a, b) => a.is_closed - b.is_closed || a.name - b.name);

答案 2 :(得分:0)

您也可以使用 lodash (sortBy)。

示例: _.sortBy(rawDataListDup, ['is_closed', 'name']);

相关问题