gpt4 book ai didi

javascript - 打印数组中缺失的连续数字作为范围

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:09:04 26 4
gpt4 key购买 nike

我想在范围内显示数组中没有显示的数字,数组包含从 1 到 128 的数字。

例如数组 [87,89,90,91,92,93,94,95,96,97,99]

我要打印 1-86、88、98、100-128

我写了一个函数,只有当第一个未使用的数字和最后一个中间没有数字时才有效

function PrintPorts(ports) {
var portString = "";
var open = true;
let index = 1
for (; index < 129; index++) {
for (let j = 0; j < ports.length; j++) {
if (index == ports[j]) {
open = false;
break;
} else
open = true;

}
if (open) {
portString += index;
break;
}
}
for (; index < 129; index++) {
for (let j = 0; j < ports.length; j++) {
if (index == ports[j]) {
open = false;
break;
} else
open = true;
}
if (!open) {
portString += "-" + (index - 1) + ",";
}
}
if (index == 129 && open) portString += "-" + (index - 1);
return portString;
}

console.log(PrintPorts([87,89,90,91,92,93,94,95,96,97,99]));

这是示例数组的结果 1-86、-88、-89、-90、-91、-92、-93、-94、-95、-96、-98、-128

当我需要的是1-86、88、98、100-128

感谢任何帮助

最佳答案

首先,通过使用 includes() 方法来测试数组是否包含元素来简化您的代码。

然后,使用嵌套循环来完成。外循环寻找范围的开始。当它找到它时,内循环会寻找范围的末尾。测试开始和结束是否相同,以决定是输出一个数字还是输出两个数字之间有-

生成逗号分隔字符串的最佳方法是将结果放入数组中,然后在末尾使用 join() 将它们连接起来。

function PrintPorts(ports) {
var openPorts = [];
for (let index = 1; index < 129; index++) {
if (!ports.includes(index)) {
let startPort = index;
for (index = startPort + 1; index < 129; index++) {
if (ports.includes(index)) {
break;
}
}
let endPort = index - 1;
openPorts.push(startPort == endPort ? startPort : `${startPort}-${endPort}`);
}
}
return openPorts.join(",");
}

console.log(PrintPorts([87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 99]));
console.log(PrintPorts([1, 2, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 99, 120, 128]));

关于javascript - 打印数组中缺失的连续数字作为范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399093/

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