首页 > 解决方案 > 基于两个属性对对象数组进行排序

问题描述

我想根据nameand对数组下方进行排序is_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},
];

这个怎么做?

标签: javascriptangulartypescript

解决方案


您可以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);


推荐阅读