[英]Is it possible to filter consecutive numbers from an array in javascript?
我有像下面這樣的 arrays 。
[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
MOVE:到數組中的下一個數字
IF:數組中的當前數+1減去數組中的當前數-1 === 2
PUSH:將當前數字放入 endArray
ELSE IF:當前數 -1 ===1
PUSH:將當前數字放入 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
數組,並繼續嵌套循環,該循環檢查j-1
元素(當前序列的始終具有第一個元素i
)和j
元素是否為連續的,如果是,則將序列的第j
個元素添加到end
數組中。 最后,當嵌套循環完成執行時,它將j
添加到i
,以更改下一個序列的起點。
我知道解釋很混亂,但希望它可以幫助您理解。
我們可以使用數組內置方法filter
。 評論中的解釋。
const start = [1, 2, 3, 10, 15, 24, 25, 26, 27] const result = start.filter((el, i) => { // if `el` is the any element in consecutive sequence except the first if (el - 1 === start[i - 1]) return true // else it is consecutive sequence of size 1 (10, 15) in the example, // or it is first element in consecutive sequence of size greater than 1 return false }) console.log(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.