根据数组中的两个字段查找最大值



假设我们有一个数组

[{no:1,count:1},{no:2,count:1},{no:2,count:2},{no:3,count:1},{no:4,count:1},{no:5,count:1}]

所以我想在这个数组中找到前5个no,但如果两个数字相等,那么应该选择计数较高的一个,例如在上面的情况下,前5个应该是

[{no:5,count:1},{no:4,count:1},{no:3,count:1},{no:2,count:2},{no:1,count:1}]

编写自己的比较函数很容易:

function compare( a, b ) {
if ( a.no < b.no ){
return 1;
}
if ( a.no > b.no ){
return -1;
}
if( a.no === b.no) {
if ( a.count < b.count ){
return 1;
}
if ( a.count > b.count ){
return -1;
}
}
return 0;
}
const data = [
{no:1,count:1},
{no:2,count:1},
{no:2,count:2},
{no:3,count:1 },
{no:4,count:1},
{no:5,count:1}
];
data.sort( compare );

使用对象的另一种排序方法:

const data = [{no:1,count:1},{no:2,count:1},{no:2,count:2},{no:3,count:1},{no:4,count:1},{no:5,count:1}];
const getTop = (arr, size = 5) => Object.values(
arr.reduce((acc, e) => {
acc[e.no] ??= e;
if (acc[e.no].count < e.count) acc[e.no] = e;
return acc;
}, {})
)
.reverse()
.slice(0, size);
console.log(getTop(data, 5));
.as-console-wrapper { max-height: 100% !important; top: 0 }

最新更新