30 days", " X days 要求: 上面提到的数组应该按照 greater then (>)排序 和 lesser then symbol ( 30 days-6ren">
gpt4 book ai didi

JavaScript : Sorting an array

转载 作者:可可西里 更新时间:2023-11-01 02:37:32 27 4
gpt4 key购买 nike

未排序的数组[输入]:

["> 30 days", "< 7 days", "< 30 days", "< 10 days"];

数组中元素的格式总是这样:</> X days

要求:

上面提到的数组应该按照 greater then (>)排序 lesser then symbol (<) 并牢记天数(天数越少越好)。

预期数组[输出]:

["< 7 days", "< 10 days", "< 30 days", "> 30 days"];

到目前为止已尝试:

我试过了 Array.sort()功能,但没有得到预期的输出。

var arr = ["> 30 days", "< 7 days", "< 30 days", "< 10 days"];

var sortedArr = arr.sort();

console.log(sortedArr); // ["< 30 days", "< 10 days", "< 7 days", "> 30 days"]

最佳答案

您可以按数字排序,如果比较符号可用,则将两个偏移量的增量取为相同的数值,这反射(reflect)了比较顺序。

var array = ["> 30 days", "< 7 days", "30 days", "< 10 days", "> 10 days", "< 11 days", "42 days", ">= 42 days", "> 42 days", "<= 42 days", "< 42 days"];

array.sort(function (a, b) {
function getV(s) {
return {
value: s.match(/\d+/),
offset: { '<': -2, '<=': -1, null: 0, '>=': 1, '>': 2 }[s.match(/[<>]={0,1}(?=\s*\d)/)]
};
}
var aa = getV(a),
bb = getV(b);

return aa.value - bb.value || aa.offset - bb.offset;
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }


第一个/以前的解决方案

您可以解析字符串并将其用于对数字应用更正值 - 然后进行相应排序。

{ '>': 0.1, '<': -0.1, null: 0 }[s.match(/[<>](?=\s*\d)/)] + +s.match(/\d+/)

具有校正值的对象

{ '>': 0.1, '<': -0.1, null: 0 }                                    

用正则表达式获取符号并将其用作对象的键

                                 s.match(/[<>](?=\s*\d)/)

然后添加字符串的数字部分

                                                          + +s.match(/\d+/)

var array = ["> 30 days", "< 7 days", "30 days", "< 10 days"];

array.sort(function (a, b) {
function getV(s) {
return { '>': 0.1, '<': -0.1, null: 0 }[s.match(/[<>](?=\s*\d)/)] + +s.match(/\d+/);
}
return getV(a) - getV(b);
});

console.log(array);

关于JavaScript : Sorting an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45162860/

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