我有一个API,它给出这样的响应(为了简洁和清晰,将其分配给一个变量)
let response = [{
id: 6789,
pageNumber: null,
sequence: 1
},
{
id: 3456,
pageNumber: 2,
sequence: 3
},
{
id: 1234,
pageNumber: 1,
sequence: 5
},
{
id: 8967,
pageNumber: null,
sequence: 2
}
]
现在,如果它不为空,我必须按pageNumber
排序,如果它为空,则按sequence
排序。但pageNumber
的值不为空应该是第一个。因此,结果应该如下所示
[{
id: 1234,
pageNumber: 1,
sequence: 5
},
{
id: 3456,
pageNumber: 2,
sequence: 3
},
{
id: 6789,
pageNumber: null,
sequence: 1
},
{
id: 8967,
pageNumber: null,
sequence: 2
}
]
我看了很多解决方案,但大多数都是JS的。当我在TS中尝试时,就像这个
response.sort((r1: any, r2: any) => {
return (r1.pageNumber === null) - (r2.pageNumber === null) || r1.pageNumber - r2.pageNumber || r1.sequence - r2.sequence;
});
我得到一个错误说:
算术运算的左侧必须是“any”、“number”、“bigint”或枚举类型。
我该如何纠正我的排序方法,或者我应该用不同的方法?注意:所有对象都有sequence
。pageNumber
可以为null。
1条答案
按热度按时间1l5u6lss1#
把布尔值转换成数字,这就成功了。