【问题标题】:JavaScript sort multiple arrayJavaScript对多个数组进行排序
【发布时间】:2022-01-18 16:06:06
【问题描述】:

假设我有这些数据

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

【问题讨论】:

  • 不确定我是否理解您的问题。你能提供你想要的输出然后更容易理解你想要完成什么
  • 虽然我同意@Persyl 的观点,但不清楚你想要什么,如果我理解正确,我相信你可以通过使用 .filter() 函数来实现这一点。
  • @Kathara - 对不起,因为我的问题太模糊了。输出应按降序显示所有学生姓名、分数和成绩的表格

标签: javascript multidimensional-array


【解决方案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);

【讨论】:

    【解决方案2】:

    如果您的意思是期望输出如下:

    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
    })
    

    希望我的理解正确吗?

    【讨论】:

    • 很抱歉,您已经提出了我不完整且含糊的问题,但输出必须包含所有数据(姓名、标记和等级)。由于所有数据都联系在一起(标记->学生),我不知道如何在不更改分配数据的索引的情况下对其进行排序
    • 你不能。对数据进行排序当然意味着您更改数组中每个项目的索引
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多