JS计数排序与分隔符



我有一个样本我的数据与以下数组,目前在顺序的结果应该看起来像;我如何实现计数排序来保持这些数据以这种形式组织:

  1. 按前4位数字升序排列。

  2. 按"-"后的最后4位数字排列分隔符,按升序排列。

  3. 检查":"后面的数字分隔符并按升序组织

    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; }

最新更新