Iterator.prototype.drop()
语法
js
drop(limit)
参数
limit
-
从迭代开始处要跳过的元素数量。
返回值
一个新的 迭代器帮助器。第一次调用返回的迭代器帮助器的 next()
方法时,当前迭代器会立即前进 limit
个元素,然后返回下一个元素(第 limit+1
个元素)。迭代器帮助器随后会逐个返回剩余的元素。如果当前迭代器拥有的元素数量少于 limit
,则新的迭代器帮助器将在第一次调用 next()
时立即完成。
异常
示例
使用 drop()
以下示例创建一个迭代器,该迭代器返回斐波那契数列中的项,从第三项开始,并跳过前两项
js
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const seq = fibonacci().drop(2);
console.log(seq.next().value); // 2
console.log(seq.next().value); // 3
这等同于
js
const seq = fibonacci();
seq.next();
seq.next();
将 drop() 与 for...of 循环一起使用
当您没有手动滚动迭代器时,drop()
最为方便。因为迭代器也是可迭代的,所以您可以使用 for...of
循环迭代返回的帮助器
js
for (const n of fibonacci().drop(2)) {
console.log(n);
if (n > 30) {
break;
}
}
// Logs:
// 2
// 3
// 5
// 8
// 13
// 21
// 34
将 drop() 与 take() 结合使用
您可以将 drop()
与 Iterator.prototype.take()
结合使用,以获取迭代器的切片
js
for (const n of fibonacci().drop(2).take(5)) {
// Drops the first two elements, then takes the next five
console.log(n);
}
// Logs:
// 2
// 3
// 5
// 8
// 13
for (const n of fibonacci().take(5).drop(2)) {
// Takes the first five elements, then drops the first two
console.log(n);
}
// Logs:
// 2
// 3
// 5
drop 计数的下限和上限
当 limit
为负数或 NaN
时,会抛出 RangeError
。
js
fibonacci().drop(-1); // RangeError: -1 must be positive
fibonacci().drop(undefined); // RangeError: undefined must be positive
当 limit
大于迭代器可以产生的元素总数(例如 Infinity
)时,返回的迭代器帮助器会立即跳过所有元素,然后在第一次调用 next()
时完成。如果当前迭代器是无限的,则返回的迭代器帮助器将永远不会完成。
js
fibonacci().drop(Infinity).next(); // Never ends
new Set([1, 2, 3]).values().drop(Infinity).next(); // { value: undefined, done: true }
new Set([1, 2, 3]).values().drop(4).next(); // { value: undefined, done: true }
规范
规范 |
---|
迭代器帮助器 # sec-iteratorprototype.drop |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。