我想显示一个paginator,这是我的函数,它产生我正在寻找的结果,但我认为它可以简化。
想法?
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"
答案 0 :(得分: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
);
}