项目过滤相关的数据结构问题
Data structure problem related to items filtering
我有这个数据:
共有三列r_code、wtg_code和rr。每一行都可以视为对象属性的集合。我们必须从现有行中 select n 行。考虑到行按 r_code 的降序排列,约束是
- Select行按r_code降序排列,多行可以有相同的r_code.
- 如果多行相同r_code,则select在wtg_code的基础上递减。
- 如果多行具有相同的 wtg_code 那么 select 根据最低的 rr.
如果能在Javascript中给出解决方案就更好了,否则我欢迎任何语言。
在JavaScript中,数据可以这样表示:
let data = [
{ r_code: 5, wtg_code: 8, rr: 3.4 },
{ r_code: 5, wtg_code: 8, rr: 3.4 },
{ r_code: 5, wtg_code: 7, rr: 4.5 },
{ r_code: 4, wtg_code: 6, rr: 1.2 },
{ r_code: 4, wtg_code: 6, rr: 2.4 },
{ r_code: 4, wtg_code: 6, rr: 4.5 },
{ r_code: 2, wtg_code: 6, rr: 1.6 },
{ r_code: 2, wtg_code: 5, rr: 7.4 },
{ r_code: 1, wtg_code: 4, rr: 3.1 },
{ r_code: 1, wtg_code: 4, rr: 2.9 },
{ r_code: 1, wtg_code: 3, rr: 3.3 },
];
Considering the row are sorted in decreasing order of r_code
这仍然可以进行多种排列。选择规则实际上意味着您应该更精确地对数据进行排序:按降序 r_code
、降序 wtg_code
和升序 wtg_code
.
为此,您可以使用 sort
方法。
data.sort((a, b) => b.r_code - a.r_code || b.wtg_code - a.wtg_code || a.rr - b.rr);
最后,如果你对前10个(n=10
)感兴趣,那么切片:
let n = 10;
console.log(data.slice(0, n));
我有这个数据:
共有三列r_code、wtg_code和rr。每一行都可以视为对象属性的集合。我们必须从现有行中 select n 行。考虑到行按 r_code 的降序排列,约束是
- Select行按r_code降序排列,多行可以有相同的r_code.
- 如果多行相同r_code,则select在wtg_code的基础上递减。
- 如果多行具有相同的 wtg_code 那么 select 根据最低的 rr.
如果能在Javascript中给出解决方案就更好了,否则我欢迎任何语言。
在JavaScript中,数据可以这样表示:
let data = [
{ r_code: 5, wtg_code: 8, rr: 3.4 },
{ r_code: 5, wtg_code: 8, rr: 3.4 },
{ r_code: 5, wtg_code: 7, rr: 4.5 },
{ r_code: 4, wtg_code: 6, rr: 1.2 },
{ r_code: 4, wtg_code: 6, rr: 2.4 },
{ r_code: 4, wtg_code: 6, rr: 4.5 },
{ r_code: 2, wtg_code: 6, rr: 1.6 },
{ r_code: 2, wtg_code: 5, rr: 7.4 },
{ r_code: 1, wtg_code: 4, rr: 3.1 },
{ r_code: 1, wtg_code: 4, rr: 2.9 },
{ r_code: 1, wtg_code: 3, rr: 3.3 },
];
Considering the row are sorted in decreasing order of r_code
这仍然可以进行多种排列。选择规则实际上意味着您应该更精确地对数据进行排序:按降序 r_code
、降序 wtg_code
和升序 wtg_code
.
为此,您可以使用 sort
方法。
data.sort((a, b) => b.r_code - a.r_code || b.wtg_code - a.wtg_code || a.rr - b.rr);
最后,如果你对前10个(n=10
)感兴趣,那么切片:
let n = 10;
console.log(data.slice(0, n));