迭代器的切片运算符

时间:2019-04-10 15:31:31

标签: javascript iterator slice

我正在寻找一种切片迭代器的方法,我找不到使用现有标准方法/函数进行迭代的合适方法。

这就是我想做的:

// Suppose I have this generator:
function* range(n){
  for (let i = 0; i < n; i += 1){
    yield i;
  }
}

// This is obviously not desirable as we create a large array:
console.log(Array.from(range(100)).slice(2, 5));
// -> [ 2, 3, 4 ]

// What I'm looking for is an existing function that would be equivalent to this: 
function* islice(iterable, start, end){
  if (!end){
    end = start;
    start = 0;
  }
  dropfirsts(iterable, start);
  yield* firsts(iterable, end-start);
}

function dropfirsts(iterable, n){
  for (let i of range(n)){ 
    if (iterable.next().done) return;
  }
}

function* firsts(iterable, n){
  for (let j of range(n)){
    const item = iterable.next();
    if (item.done) return;
    yield item.value;
  }
}

console.log(Array.from(islice(range(10), 2, 5)));
// -> [ 2, 3, 4 ]

请注意,我不是在寻找islice函数的完整实现,而是在标准库中寻找与之等效的函数。

0 个答案:

没有答案