假設我有一個看起來像這樣的陣列
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
這些陣列代表我的場景中的頁碼。假設我在第 8 頁,我想創建一個單獨的陣列,其中包含以下第 8 頁之前的前 5 個和第 8 頁之后的前 5 個。
即前 11 項陣列。
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
因此,包括該頁面本身在內的陣列中有 11 個專案。
如果陣列小于 5,則只需回傳其余部分。
IE
如果陣列看起來像這樣[2,3,4,5,6,7,8]
并且頁面是 4,因為之前沒有 5 個專案,我想得到所有這些。
uj5u.com熱心網友回復:
您可以使用Array的slice方法。
function paginatorNumbers(arr, currentIndex) {
return arr.length > 5 && currentIndex > 5
? arr.slice(currentIndex - 6, currentIndex 5)
: arr.slice(0, currentIndex 5)
}
uj5u.com熱心網友回復:
使用切片功能。在您的示例中給定 x=8,以下內容將創建一個具有您想要的索引的新陣列。
arr.slice(x-5, x 6)
起始索引 x-5 包含在內(或者它將包括索引 8-5 = 3)。結束索引 x 6 是獨占的(它將不包括索引 8 6=14)。所以你會得到你想要的索引 3 - 13。
uj5u.com熱心網友回復:
編輯:
這應該現在作業
const getRange = (array, index) => {
// You need constraints if index - 5 is < 0
const startIndex = Math.max(0, index - 5 - 1);
const endIndex = index 5;
return array.slice(startIndex, endIndex);
}
uj5u.com熱心網友回復:
您可以使用array#slice在相對于索引的范圍內生成數字。
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
index = 4,
range = 5,
getRangeItem = (arr, index, range) => {
const start = Math.max(index - range - 1, 0),
end = Math.min(index range, arr.length),
result = arr.slice(start, end);
return result;
}
console.log(getRangeItem(arr, index, range));
uj5u.com熱心網友回復:
您可以使用 Plus 和 Minus 使其變得非常簡單。
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
function getRange(current) {
let start = (current -5)
let end = (current 5)
let res = []
start = start < 0 ? 0 : start
for(start; start <= end; start ) {
res.push(start)
}
return res;
}
console.log(getRange(8)) // starts from 3
console.log(getRange(2)) // starts from 0
uj5u.com熱心網友回復:
使用該slice方法,您可以從整個陣列中獲取特定的子陣列。您需要做的是在頁面索引之前切片5個位置,然后在頁面索引之后切片5個位置。然后,只是concat兩個子陣列并得到結果。
的Math.min和Math.max功能是避免范圍問題切片陣列時。因此,當子陣列小于 5 時,它只回傳陣列的其余部分,而不是空陣列。
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
let currentPage = parseInt(prompt("Current page"));
// page index
let i = arr.indexOf(currentPage);
// Using Math.max and Math.min to avoid range problems
const subarr = arr.slice(Math.max(i - 5, 0), i).concat(
arr.slice(i, Math.min(i 6, arr.length)));
console.log(subarr);
uj5u.com熱心網友回復:
這是一個通用的解決方案
- 可設定前后專案數
- .slice() 用于對陣列進行計時
- 檢查起始索引不 < 0(否則將從末尾開始切片)
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
function getBeforeAfter(arr, index, count) {
let start = index - count -1
if(start < 0) start = 0
let end = index count
return arr.slice(start, end)
}
console.log(getBeforeAfter(arr,8,5)) // [3,4,5,6,7,8,9,10,11,12,13]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340788.html
標籤:javascript
上一篇:用多個字串變數填充JSON
