gpt4 book ai didi

javascript - 在javascript中按两个或多个子字符串对字符串数组进行排序

转载 作者:行者123 更新时间:2023-11-30 09:59:35 25 4
gpt4 key购买 nike

我有一个 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

我想对这个数组进行排序:

  1. 通过子字符串“best”和“worst”。
  2. 通过 tolPercents 0 和 0.01
  3. 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;
}

但恐怕我正在尝试的代码是按顺序进行排序的。所以我认为第一个自定义排序方法被第二个覆盖是什么?

非常感谢任何帮助。

最佳答案

此解决方案具有 Sorting with map来自 MDN。

首先构建一个带有拆分项目的映射数组进行排序。然后按自定义顺序对其进行排序。

function (a, b) {
return a.rating.localeCompare(b.rating) ||
a.tolPercents - b.tolPercents ||
a.size - b.size;
}

总计:

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"
],
result = data.map(function (el, i) {
var a = /^size(.+)_tolpercent(.+)_(.+)$/i.exec(el);
return {
index: i,
rating: a[3],
tolPercents: a[2],
size: a[1] === 'max' ? Number.MAX_VALUE : a[1]
};
}).sort(function (a, b) {
return a.rating.localeCompare(b.rating) || a.tolPercents - b.tolPercents || a.size - b.size;
}).map(function (el) {
return data[el.index];
});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

关于javascript - 在javascript中按两个或多个子字符串对字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32378431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com