我有下面这样的数组。
[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