如何对复杂的javascript数组进行排序?

时间:2014-01-31 00:54:19

标签: javascript arrays sorting

我有一个名为generationArray的数组。生成数组内的每个数组都是252个位置的数组。前250个职位是内部代码,最后两个职位代表我的分类标准。 数组的最后一个位置是boolean,前一个是数字。

我需要首先按其数组的所有generationArraytrue值排序此false,然后输入数值。如果最后一个位置是先按较大的数字顺序排序,如果最后一个位置是假排序,则先由较小的数字排序。

这是一个例子,假设generationArray有5个数组。

generationArray[0][last] == false
generationArray[0][last-1] == 350

generationArray[1][last] == true
generationArray[1][last-1] == 300

generationArray[2][last] == true
generationArray[2][last-1] == 250

generationArray[3][last] == false
generationArray[3][last-1] == 380

generationArray[4][last] == true
generationArray[4][last-1] == 290

必须像

那样订购
generationArray[0][last] == true
generationArray[0][last-1] == 300

generationArray[1][last] == true
generationArray[1][last-1] == 290

generationArray[2][last] == true
generationArray[2][last-1] == 250

generationArray[3][last] == false
generationArray[3][last-1] == 350

generationArray[4][last] == false
generationArray[4][last-1] == 380

如何在Javascript中实现此目的?

1 个答案:

答案 0 :(得分:0)

这应该这样做:

generationArray.sort(function(a, b) {
    return b[251]-a[251] || (a[251]*2-1)*(b[250]-a[250]);
})
  • b[251]-a[251]将布尔值转换为整数并在true
  • 之前falses s进行比较
  • 如果结果为0,则会评估||
  • b[250]-a[250] compares the ints,再次提供更大的值
  • 但如果布尔值为false,则(a[251]*2-1)*会反转该订单。

由于您的数字总是正数,因此可能更常见/更容易理解的解决方案是将布尔伴侣为true的数字视为否定。您甚至可以简单地重构数据以使用该模式。那么你所要做的就是数字排序:

generationArray.sort(function(a, b) {
    return (a[251]?-a[250]:+a[250]) - (b[251]?-b[250]:+b[250]);
})