【发布时间】:2015-09-03 14:28:27
【问题描述】:
我有一个如下所示的 javascript 数组:
var data = ["size64_tolPercent0.01_best", "size256_tolPercent0.01_best", "size256_tolPercent0_worst", "sizemax_tolPercent0_worst", "size1518_tolPercent0_worst", "size64_tolPercent0.01_worst", "size512_tolPercent0.01_worst", "size1518_tolPercent0.01_worst", "size256_tolPercent0_best"] etc
我想对这个数组进行排序:
- 通过子字符串“best”和“worst”。
- 通过 tolPercents 0 和 0.01
- sizes (64, 256, 512, 1518, max).. 如果尺寸按字符串排序会很好,因为它包含“max”关键字..
所以,我们最终得到一个如下所示的结果数组:
["size64_tolPercent0_best", "size256_tolPercent0_best", "size512_tolPercent0_best", "size1518_tolPercent0_best", "sizemax_tolPercent0_best", "size64_tolPercent0.01_best", "size512_tolPercent0.01_best", "size1518_tolPercent0.01_best", "size64_tolPercent0_worst", "size256_tolPercent0_worst", "size512_tolPercent0_worst", "size1518_tolPercent0_worst", "sizemax_tolPercent0_worst"] etc
我可以使用其中一种方法对字符串进行排序,但不是全部。
到目前为止,这是我尝试过的,我确定我做错了,只是需要一些正确方向的帮助。现在做 1 和 3:
var someLargeValue = 10000000;
data.sort(function(x,y){
var xp = x.substr(getPosition(x, '_', 2) + 1, x.split("_").pop().length);
var yp = y.substr(getPosition(y, '_', 2) + 1, y.split("_").pop().length);
return xp == yp ? 0 : xp < yp ? -1 : 1;
});
data.sort(function(x,y){
var xp = x.substr(4, getPosition(x, '_', 1) - 4);
var yp = y.substr(4, getPosition(y, '_', 1) - 4);
if(xp === "max") {
xp = someLargeValue;
}
if(yp === "max") {
yp = someLargeValue;
}
xp = parseInt(xp);
yp = parseInt(yp);
return xp == yp ? 0 : xp < yp ? -1 : 1;
});
function getPosition(str, m, i) {
return str.split(m, i).join(m).length;
}
但我担心我正在尝试的代码是按顺序进行排序.. 那么第一个自定义排序方法会被第二个覆盖吗?
非常感谢任何帮助。
【问题讨论】:
-
向我们展示你迄今为止的尝试
-
只需使用所有三种方法,一个接一个,具体取决于您的优先级。例如排序:
best-worst首先,然后percent,然后size最后。请注意,如果没有某种优先级排名,您将无法准确排序。 -
我已经用我的代码编辑了这个问题。
-
是的,你是对的,第二个排序会覆盖第一个。一个电话就足以得到想要的结果。见stackoverflow.com/a/32379540/1636522 和stackoverflow.com/a/32379343/1636522。
标签: javascript arrays sorting