我有一个名为generationArray
的数组。生成数组内的每个数组都是252个位置的数组。前250个职位是内部代码,最后两个职位代表我的分类标准。
数组的最后一个位置是boolean
,前一个是数字。
我需要首先按其数组的所有generationArray
或true
值排序此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中实现此目的?
答案 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]);
})