我有一个合乎逻辑的挑战,我想知道什么是最佳实践或可能的方法或库来最好地解决问题。
我们假设有多个数组,例如[10, 20, 30] ["24-30", "45-60"] [34, 35] ["28-33", 90]
我想要的是单个范围和不同值的概述,没有任何冗余。因此,在上层数组中,应该生成一个包含所有值的单个排序数组,这些数组将合并为逻辑有序流。
例如,对于较高的值,我期望一个字符串
[10, 20, "24-35", "45-60", 90]
所以逻辑应该检测到,例如, 30已包含在[24-30]
中,即" 28-33"继续并与" 24-30"重叠和" 28-33"单值34和35继续。
也许有人知道一个图书馆支持我这个问题或知道一个好的解决方案?
答案 0 :(得分:1)
您可以使用链式方法更改数据结构,对重新组合连接的部件进行排序。
var data = [[10, 20, 30], ["24-30", "45-60"], [34, 35], ["28-33", 90]],
result = data
.reduce(function (r, a) {
a.map(function (b) {
var c = b.toString().split('-')
c[1] = c[1] || c[0];
r.push(c.map(Number));
});
return r;
}, [])
.sort(function (a, b) { return a[0] - b[0] || a[1] - b[1]; })
.reduce(function (r, a) {
var last = r[r.length - 1] || [];
if (a[0] <= last[1] + 1) {
if (last[1] < a[1]) {
last[1] = a[1];
}
return r;
}
return r.concat([a]);
}, [])
.map(function (a) {
return a[0] === a[1] ? a[0] : a.join('-');
});
console.log(result);
&#13;