2016-05-22 4 views
0

Ich möchte einen Paginator anzeigen, hier ist meine Funktion, es produziert das Ergebnis, das ich suche, aber ich denke, es kann vereinfacht werden.Vereinfachen Sie die Erstellung einer Seitenliste für die Paginierung

Ideen?

const WINDOW = 2; 

const func = (item, items) => { 
    const result = []; 
    const itemIdx = _.indexOf(items, item); 
    if (itemIdx - WINDOW > 0) { 
    result.push('...'); 
    } 
    result.push(
    _.map(itemIdx + WINDOW < items.length ? 
     _.take(_.dropWhile(items, p => _.indexOf(items, p) < itemIdx - WINDOW), WINDOW * 2 + 1) : 
     _.takeRight(_.dropRightWhile(items, p => _.indexOf(items, p) > itemIdx + WINDOW), WINDOW * 2 + 1) 
    ) 
); 
    if (itemIdx + WINDOW < items.length - 1) { 
    result.push('...'); 
    } 
    return _.flatten(result); 
}; 

const input = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
for (let i = 1; i < 10; i++) { 
    console.log(i + ': ' + func(i, input)); 
} 

Ausgang:

"1: 1,2,3,4,5,..." 
"2: 1,2,3,4,5,..." 
"3: 1,2,3,4,5,..." 
"4: ...,2,3,4,5,6,..." 
"5: ...,3,4,5,6,7,..." 
"6: ...,4,5,6,7,8,..." 
"7: ...,5,6,7,8,9" 
"8: ...,5,6,7,8,9" 
"9: ...,5,6,7,8,9" 

Antwort

2

wie über dieses

function func(item, items){ 
    var window = 5, more = "...", //configs 
     nothin = [], //util 
     limit = items.length - window, 
     i = Math.max(0, Math.min(limit, items.indexOf(item) - (window>>1))); 

    return nothin.concat(
     i > 0? more: nothin, 
     items.slice(i, i + window), 
     i < limit? more: nothin 
    ); 
}