Roh*_*dal 10 javascript arrays sorting
未排序的数组[输入]:
["> 30 days", "< 7 days", "< 30 days", "< 10 days"];
Run Code Online (Sandbox Code Playgroud)
数组中元素的格式总是如下: </> X days
要求:
上面提到的数组应该根据和排序greater then (>),lesser then symbol (<)并且还要记住天数(应该先减少天数).
预期数组[输出]:
["< 7 days", "< 10 days", "< 30 days", "> 30 days"];
Run Code Online (Sandbox Code Playgroud)
到目前为止尝试过:
我尝试了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"]Run Code Online (Sandbox Code Playgroud)
Nin*_*olz 13
您可以按数字排序,如果有比较符号,则获取相同数值的两个偏移的增量,这反映了比较的顺序.
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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
第一/前解决方案
您可以解析字符串并使用它来对数字应用校正值 - 然后进行相应的排序.
{ '>': 0.1, '<': -0.1, null: 0 }[s.match(/[<>](?=\s*\d)/)] + +s.match(/\d+/)
Run Code Online (Sandbox Code Playgroud)
具有修正值的物体
{ '>': 0.1, '<': -0.1, null: 0 }
Run Code Online (Sandbox Code Playgroud)
使用正则表达式获取符号并将其用作对象的键
s.match(/[<>](?=\s*\d)/)
Run Code Online (Sandbox Code Playgroud)
然后添加字符串的数字部分
+ +s.match(/\d+/)
Run Code Online (Sandbox Code Playgroud)
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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |