gpt4 book ai didi

javascript - 结合Javascript中几个值的数字范围

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:38 24 4
gpt4 key购买 nike

我有一个逻辑挑战,我想知道什么是最佳实践或可能的方法或库来最好地解决这个问题。

假设有多个数组,例如 [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 继续。

也许有人知道支持我解决此类问题的图书馆或知道好的解决方案?

最佳答案

您可以使用链式方法来更改数据结构、排序和重新组装连接的部分。

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

关于javascript - 结合Javascript中几个值的数字范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42093036/

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