JavaScript 排序多个数组
JavaScript sort multiple array
假设我有这个数据
Name
Mark
John
76
Jack
55
Dani
90
和成绩
Marks
Grade
100-80
A
79 - 60
B
59 - 40
C
假设我将脚本声明为
let data = [
[John, 76],
[Jack, 55],
[Dani, 90]
];
程序应该给成绩分配相应的分数,我知道我们不能像往常一样更改分数的索引,因为每个分数分配给不同的学生,我该如何对成绩进行排序?输出应以 降序 显示所有数据,如
Name
Mark
Grade
Dani
90
A
John
76
B
Jack
55
C
如果您的意思是您希望输出如下:
Dani - A
John - B
Jack - C
然后我会做类似的事情:
一个方法:
getGrade(points => {
if(points >= 80 && points <= 100) return 'A'
if(points >= 60 && points < 80) return 'B'
return 'C'
})
则数据为:
const data = [
{name: 'John', value: 76},
{name: 'Jack', value: 55},
{name: 'Dani', value: 90},
]
然后就这样做:
data.sort((student1, student2) => {
if(getGrade(student1.value) === student2.value) return 0
return (getGrade(student1.value) > getGrade(student2.value))? 1 : -1
})
希望我理解正确?
我会将其分解为不同的功能,以便您可以分别处理每个任务。然后你可以将它们组合起来产生你想要的结果,像这样:
const grades = [
['A', 80],
['B', 60],
['C', 40],
];
function getGrade (mark) {
for (const [grade, minMark] of grades) {
if (mark < minMark) continue;
return grade;
}
return 'F'; // use minimum grade as default if mark is too low
}
function mapToObject ([name, mark]) {
return {grade: getGrade(mark), name, mark};
}
function sortByHighestMark (a, b) {
return b.mark - a.mark;
}
const data = [
['John', 76],
['Jack', 55],
['Dani', 90]
];
const result = data.map(mapToObject).sort(sortByHighestMark);
console.log(result);
// and data is unmodified:
console.log(data);
假设我有这个数据
Name | Mark |
---|---|
John | 76 |
Jack | 55 |
Dani | 90 |
和成绩
Marks | Grade |
---|---|
100-80 | A |
79 - 60 | B |
59 - 40 | C |
假设我将脚本声明为
let data = [
[John, 76],
[Jack, 55],
[Dani, 90]
];
程序应该给成绩分配相应的分数,我知道我们不能像往常一样更改分数的索引,因为每个分数分配给不同的学生,我该如何对成绩进行排序?输出应以 降序 显示所有数据,如
Name | Mark | Grade |
---|---|---|
Dani | 90 | A |
John | 76 | B |
Jack | 55 | C |
如果您的意思是您希望输出如下:
Dani - A
John - B
Jack - C
然后我会做类似的事情:
一个方法:
getGrade(points => {
if(points >= 80 && points <= 100) return 'A'
if(points >= 60 && points < 80) return 'B'
return 'C'
})
则数据为:
const data = [
{name: 'John', value: 76},
{name: 'Jack', value: 55},
{name: 'Dani', value: 90},
]
然后就这样做:
data.sort((student1, student2) => {
if(getGrade(student1.value) === student2.value) return 0
return (getGrade(student1.value) > getGrade(student2.value))? 1 : -1
})
希望我理解正确?
我会将其分解为不同的功能,以便您可以分别处理每个任务。然后你可以将它们组合起来产生你想要的结果,像这样:
const grades = [
['A', 80],
['B', 60],
['C', 40],
];
function getGrade (mark) {
for (const [grade, minMark] of grades) {
if (mark < minMark) continue;
return grade;
}
return 'F'; // use minimum grade as default if mark is too low
}
function mapToObject ([name, mark]) {
return {grade: getGrade(mark), name, mark};
}
function sortByHighestMark (a, b) {
return b.mark - a.mark;
}
const data = [
['John', 76],
['Jack', 55],
['Dani', 90]
];
const result = data.map(mapToObject).sort(sortByHighestMark);
console.log(result);
// and data is unmodified:
console.log(data);