javascript - 使用迭代器 JavaScript 提取整个数组值(数组的克隆副本)

标签 javascript node.js

我有一些迭代器可以从数组中提取值。

有一个序列

[0,1,2,3,4]

可以通过迭代器访问it.next()

我想使用迭代器提取序列的整个值。

也许,中途代码是

var seq =[];
var i = 0;

 while (some_condition) 
      {          
        seq[i] = it.next();
        i++;
      }

我通常使用

if (!foo) bar;

检查值是否存在,但在这种情况下,它不起作用。

实现此目的最明智的模式是什么?

最佳答案

你应该使用for..of使用发电机:

 for(var x of it)
    seq.push(x)

如果您想使用next,请检查done 属性:

while(1) {
    x = it.next()
    if(x.done)
        break
    seq.push(x.value)
}

如果您实现自己的迭代器,我建议您遵循标准并使用 harmony protocol ,例如:

function rangeIter(min, max) {
    var done = false;
    return {
        next: function() {
            if(done)
                throw Error('Generator has already finished');
            var value;
            if(min >= max) {
                done = true;
                value = undefined;
            } else {
                value = min++;
            }
            return {done:done, value:value};
        }
    }
}

此代码的行为就像“真正的”迭代器一样:

it = rangeIter(3, 7)

console.log(it.next())  // { done: false, value: 3 }
console.log(it.next())  // { done: false, value: 4 }
console.log(it.next())  // { done: false, value: 5 }
console.log(it.next())  // { done: false, value: 6 }
console.log(it.next())  // { done: true, value: undefined }
console.log(it.next())  // Error: Generator has already finished

关于javascript - 使用迭代器 JavaScript 提取整个数组值(数组的克隆副本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474925/

相关文章:

javascript - 如何将数据从一个函数传递到作为第一个函数的参数的另一个函数

javascript - Async/await 未按预期顺序执行

node.js - 安装 puppeteer 2 Elastic Beanstalk

javascript - 在 for 循环中顺序执行 promise

javascript - 更改滚动条位置

javascript - flex 路径的 Svg 动画

android - 在 iOS/Android 中运行 node.js

javascript - 如何在自动循环网页时进行干净的过渡?

javascript - 禁用弹出背景

jquery - 我如何使用签名上传到cloudinary