js实现limit
实现数组限制长度的方法
在JavaScript中,可以通过多种方式实现数组的长度限制(即limit功能)。以下是几种常见的方法:
使用slice方法截取数组
const originalArray = [1, 2, 3, 4, 5];
const limit = 3;
const limitedArray = originalArray.slice(0, limit);
// 结果: [1, 2, 3]
使用splice方法修改原数组
const originalArray = [1, 2, 3, 4, 5];
const limit = 2;
originalArray.splice(limit);
// 原数组变为: [1, 2]
使用循环手动限制

const originalArray = [1, 2, 3, 4, 5];
const limit = 4;
const limitedArray = [];
for (let i = 0; i < limit && i < originalArray.length; i++) {
limitedArray.push(originalArray[i]);
}
// 结果: [1, 2, 3, 4]
实现分页查询的limit功能
在处理分页查询时,通常需要实现limit和offset功能:
基本分页实现

function paginate(array, page = 1, perPage = 10) {
const offset = (page - 1) * perPage;
return array.slice(offset, offset + perPage);
}
const data = Array.from({length: 100}, (_, i) => i + 1);
const page1 = paginate(data, 1, 10); // 获取第1页,每页10条
const page2 = paginate(data, 2, 10); // 获取第2页
使用高阶函数实现limit功能
可以创建一个通用的limit函数来处理各种可迭代对象:
function limit(iterable, maxCount) {
const result = [];
const iterator = iterable[Symbol.iterator]();
let count = 0;
while (count++ < maxCount) {
const {value, done} = iterator.next();
if (done) break;
result.push(value);
}
return result;
}
// 使用示例
const limited = limit([1, 2, 3, 4, 5], 2); // 返回[1, 2]
在异步场景中实现limit
处理异步操作时,可能需要限制并发数量:
限制Promise并发数
async function limitConcurrency(tasks, maxConcurrent) {
const results = [];
const executing = new Set();
for (const task of tasks) {
const p = Promise.resolve().then(() => task());
executing.add(p);
p.then(() => executing.delete(p));
if (executing.size >= maxConcurrent) {
await Promise.race(executing);
}
}
return Promise.all(results);
}
这些方法展示了在JavaScript中实现各种limit功能的灵活方式,可以根据具体需求选择适合的实现方案。






