【发布时间】:2017-03-30 01:11:58
【问题描述】:
我希望按与另一个值相关的值的升序对 JSON 对象数组进行排序。听起来令人困惑,因为它是。我在数组中的每个对象中都有属性“列”和“顺序”。我需要的顺序是: 第 1 列中的最小数字,第 2 列中的最小数字,第 3 列中的最小数字,第 1 列中的第二小数字,第 2 列中的第二小数字,第 3 列中的第二小数字,然后继续。当 'order' 具有完全相同的值时,这很容易,您可以使用如下排序函数:
function sortCourses(a, b){
if (a.order == b.order) {
return (a.column - b.column);
} else {
return (a.order - b.order);
}
}
问题是我并不总是这样设置它们。这是一个示例数组:
[
{
column: 2,
order: 5
},
{
column: 1,
order: 1
},
{
column: 3,
order: 2
},
{
column: 3,
order: 1
},
{
column: 1,
order: 4
},
{
column: 2,
order: 1
},
{
column: 3,
order: 3
},
{
column: 1,
order: 3
},
{
column: 2,
order: 3
},
{
column: 1,
order: 2
}
]
排序后,我需要这个数组看起来像:
[
{
column: 1,
order: 1
},
{
column: 2,
order: 1
},
{
column: 3,
order: 1
},
{
column: 1,
order: 2
},
{
column: 2,
order: 3
},
{
column: 3,
order: 2
},
{
column: 1,
order: 3
},
{
column: 2,
order: 5
},
{
column: 3,
order: 3
},
{
column: 1,
order: 4
}
]
关于如何实现这一点的任何想法?
【问题讨论】:
-
一个数组有
sort方法接受 1 个比较函数的参数,看起来与您提供的相似。但是,它看起来像是用于升序排序。您需要交换被减数和减数(在比较函数中进行减法)。 -
我正在使用排序方法,抱歉应该提到这一点。我提供的比较函数将它们按 [1,1]、[2,1]、[3,1] 的顺序排列,但不知道将 [2,3] 放在 [1,2] 之后,因为它正在寻找将 [2,2] 放在它旁边,它不存在。如果您提出的建议可以做到这一点,您可以发布答案吗?谢谢。
标签: javascript jquery arrays sorting