【问题标题】:array of object data sort not working对象数据排序数组不起作用
【发布时间】:2018-09-18 10:15:43
【问题描述】:

0: Object { gradeName: "A+", gradeMaxMarks: "89", gradeMinMarks: "80" }
​
1: Object { gradeName: "A", gradeMaxMarks: "79", gradeMinMarks: "70" }
​
2: Object { gradeName: "B+", gradeMaxMarks: "69", gradeMinMarks: "60" }
​
3: Object { gradeName: "B", gradeMaxMarks: "59", gradeMinMarks: "55" }
​
4: Object { gradeName: "C", gradeMaxMarks: "49", gradeMinMarks: "40" }
​
5: Object { gradeName: "D", gradeMaxMarks: "39", gradeMinMarks: "30" }
​
6: Object { gradeName: "A++", gradeMaxMarks: "100", gradeMinMarks: "90" }
​
length: 7

我在 JavaScript 中有上面的对象,它没有正确排序。我该如何解决这个问题?

【问题讨论】:

  • 看起来像 0,然后是 1,然后是 2...一直到 6(虽然很难阅读)...您期望的顺序是什么?
  • 我正在用gradeMaxMarks排序。
  • 您想按哪个值对这个对象数组进行排序?
  • 不,你不是......你有一个按照你写的顺序排列的数组......我看不到排序的尝试
  • 是的,但是您没有显示您的排序代码 - 如果您不显示它,我们如何帮助您解决这个问题

标签: javascript


【解决方案1】:

var arr = [{
    gradeName: "A+",
    gradeMaxMarks: "89",
    gradeMinMarks: "80"
  },
  {
    gradeName: "A",
    gradeMaxMarks: "79",
    gradeMinMarks: "70"
  },
  {
    gradeName: "B+",
    gradeMaxMarks: "69",
    gradeMinMarks: "60"
  },
  {
    gradeName: "B",
    gradeMaxMarks: "59",
    gradeMinMarks: "55"
  },
  {
    gradeName: "C",
    gradeMaxMarks: "49",
    gradeMinMarks: "40"
  },
  {
    gradeName: "D",
    gradeMaxMarks: "39",
    gradeMinMarks: "30"
  },
  {
    gradeName: "A++",
    gradeMaxMarks: "100",
    gradeMinMarks: "90"
  }
]

arr.sort((a,b) => Number(b.gradeMaxMarks)-Number(a.gradeMaxMarks))
console.log(arr)

【讨论】:

  • 在 A++ 中,gradeMaxMarks 为 100。所有其他标记只有 2 位数字。排序时会将 100 视为 10,我的意思是它只考虑前 2 个数字
【解决方案2】:

使用 Javascript 的 Array.sort() 方法以 降序 [100, 80, 60, 40, ....](您的要求)对数组进行排序,如下所示:

array.sort(function(a, b) {
  return b.gradeMaxMarks - a.gradeMaxMarks;
});

如果你想按 升序 [10, 20, 40, 45, 60, ....] 对数组进行排序,那么可以这样做:

array.sort(function(a, b) {
  return a.gradeMaxMarks - b.gradeMaxMarks;
});

下面是工作代码sn-p:

var array = [{gradeName:"A+",gradeMaxMarks:"89",gradeMinMarks:"80"},{gradeName:"A",gradeMaxMarks:"79",gradeMinMarks:"70"},{gradeName:"B+",gradeMaxMarks:"69",gradeMinMarks:"60"},{gradeName:"B",gradeMaxMarks:"59",gradeMinMarks:"55"},{gradeName:"C",gradeMaxMarks:"49",gradeMinMarks:"40"},{gradeName:"D",gradeMaxMarks:"39",gradeMinMarks:"30"},{gradeName:"A++",gradeMaxMarks:"100",gradeMinMarks:"90"}];

array.sort(function(a, b) {
  return b.gradeMaxMarks - a.gradeMaxMarks;
});

console.log(array)

【讨论】:

  • 这个不适用于我的数据。实际上,我将数据存储在本地存储中。 A++ 的值 100 是固定的。
  • @Sharathkumar 你是什么意思?
  • @Sharathkumar 点击Run code sn-p蓝色按钮查看输出
  • @Sharathkumar 请编辑您的问题以澄清它。
  • 在 A++ 中,gradeMaxMarks 为 100。所有其他标记只有 2 位数字。排序时会将 100 视为 10,我的意思是它只考虑前 2 个数字
【解决方案3】:

您似乎忘记了脚本的 sort 部分。

const input = [{
    gradeName: "A+",
    gradeMaxMarks: "89",
    gradeMinMarks: "80"
  },
  {
    gradeName: "A",
    gradeMaxMarks: "79",
    gradeMinMarks: "70"
  },
  {
    gradeName: "B+",
    gradeMaxMarks: "69",
    gradeMinMarks: "60"
  },
  {
    gradeName: "B",
    gradeMaxMarks: "59",
    gradeMinMarks: "55"
  },
  {
    gradeName: "C",
    gradeMaxMarks: "49",
    gradeMinMarks: "40"
  },
  {
    gradeName: "D",
    gradeMaxMarks: "39",
    gradeMinMarks: "30"
  },
  {
    gradeName: "A++",
    gradeMaxMarks: "100",
    gradeMinMarks: "90"
  }
];

input.sort((a, b) => b.gradeMaxMarks - a.gradeMaxMarks);
console.log(input);

【讨论】:

  • 在 A++ 中,gradeMaxMarks 为 100。所有其他标记只有 2 位数字。排序时会将 100 视为 10,我的意思是它只考虑前 2 个数字
猜你喜欢
  • 2020-12-19
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2017-11-08
  • 2013-12-14
  • 1970-01-01
相关资源
最近更新 更多