2016-05-22 4 views
0

ページャーを表示したい、ここに自分の関数があり、それは私が探している結果を生成しますが、単純化できると思います。ページネーション用のページリストの生成を簡略化

アイデア?

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)); 
} 

出力:

"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" 

答えて

2

どのようにこの

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 
    ); 
} 
について