是否可以用javascript过滤数组中的连续数字



我有下面这样的数组。

[1,2,3, 10, 15, 24,25,26,27]

我想要的是过滤掉非连续的数字,不包括序列中的第一个数字,但保留序列中的最后一个数字,如下所示。

[2,3, 25,26,27]

我是编码新手,我还不知道如何写这段代码,但我已经模拟了伪代码,你能检查一下这个,看看我的逻辑是否正常吗?

Var startArray=[1,2,3,10,15,24,25,26,27];

Var-endArray=[];

循环:当起始数组中还有数字时
GET:startArray 的第一个数字

IF:第一个数字是1
移动:到阵列中的下一个数字

IF:数组中的当前数字+1减去数组中的现有数字-1===2
推送:当前数字进入endArray

ELSE IF:当前数字-1===1
推送:当前数字进入endArray

如果结束

结束循环

谢谢你的帮助。

您只需要遍历所有内容,然后简单地检查当前数字是否比上一个数字高一。如果是,将其推送到您的结果数组:

var startArray = [1, 2, 3, 10, 15, 24, 25, 26, 27];
var endArray = [];
for(var i = 0; i < startArray.length; i++) {
if(startArray[i] - 1 === startArray[i - 1]) {
endArray.push(startArray[i]);
}
}
$.writeln(endArray); // => 2, 3, 25, 26, 27

以下是我的想法。

const start = [1, 2, 3, 10, 15, 24, 25, 26, 27];
let end = new Array(), i = 0;
while (i < start.length) {
let j = 2;
if (start[i+j-2] + 1 == start[i+j-1])
end.push(start[i+j-2], start[i+j-1]);
else { i++; continue; }
while (i+j < start.length && start[i+j-1] + 1 == start[i+j])
end.push(start[i+j++]);
i += j;
}

说明:第一个while循环遍历每个连续数字序列。变量j首先用于检查预期序列的第一个和第二个元素,如果它们不连续,则将i递增1,从而更改下一个预期连续数字序列的起始点。如果它们是连续的数字,它会在end数组中推送它们,并继续嵌套循环,检查(当前序列的,总是有第一个元素i的)j-1元素和j元素是否连续,如果是,它会将序列的j元素添加到end数组。最后,当嵌套循环执行完毕时,它将j添加到i,以更改下一个序列的起点。

我知道解释很混乱,但希望它能帮助你理解。

我们可以使用内置数组的方法CCD_12。评论中的解释。

PD_6

最新更新