我有一个样本我的数据与以下数组,目前在顺序的结果应该看起来像;我如何实现计数排序来保持这些数据以这种形式组织:
-
按前4位数字升序排列。
-
按"-"后的最后4位数字排列分隔符,按升序排列。
-
检查":"后面的数字分隔符并按升序组织
array = [5080-2002,5080-2002:01,5080-2002:02,5080-2102,5080-2102:01,5080-2103,5080-2103:01,5460-1601,5460-1601,5460-1601:01,5460-1601:02]
这远远超出了我目前的经验水平,所以任何帮助都会非常感激!
谢谢! !
这里有三个假设:
-
始终是元素 的一部分:
是可选的(并且具有此元素的元素应该始终跟随该部分为空的元素)- 每个部分的数字数量不固定(否则它将只是
sort()
的情况,如@NinaScholz的答案)
对于这些,这里有一个可能的方法:
const arr = [
'111-111:111',
'111-111',
'111-111:22',
'111-22',
'111-22:111',
'111-22:22',
'22-111:111',
'22-111:22',
'22-111',
'22-22',
'22-22:111',
'22-22:22',
]
arr.sort((a, b) => {
const [a0, a1, a2 = -Infinity] = a.split(/[-:]/);
const [b0, b1, b2 = -Infinity] = b.split(/[-:]/);
return a0 - b0 || a1 - b1 || a2 - b2;
})
console.log(arr);
Just sort。
const
array = ['5080-2002', '5080-2002:01', '5080-2002:02', '5080-2102', '5080-2102:01', '5080-2103', '5080-2103:01', '5460-1601', '5460-1601:01', '5460-1601:02'];
array.sort();
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }