Javascript ES6用于带钥匙和发电机的of
如果我有一个数组:Javascript ES6用于带钥匙和发电机的of,javascript,Javascript,如果我有一个数组: [1, 2, 3, 4, 5] - 我可以循环使用: for (let [i, x] of arr.entries()){..} 如果我有发电机功能: function* g() { yield 1; yield 2; yield 3; } 我不能 因此,问题是如何使用for of和generator获取循环的索引和键 正则数组和生成器的语法是否相同 最后,为什么生成器没有方法“条目”,因为它们都是可编辑的 如果以不同的方式访问iterable,那么iterab
[1, 2, 3, 4, 5] -
我可以循环使用:
for (let [i, x] of arr.entries()){..}
如果我有发电机功能:
function* g() {
yield 1; yield 2; yield 3;
}
我不能
因此,问题是如何使用for of和generator获取循环的索引和键
正则数组和生成器的语法是否相同
最后,为什么生成器没有方法“条目”,因为它们都是可编辑的
如果以不同的方式访问iterable,那么iterable有什么意义。实际上,生成器的工作原理与普通iterable数据结构略有不同。 只是为了好玩,如果你想从某个生成器中得到索引和值,你可以,如果你得到的东西确实有索引的话。你不能放弃你需要的任何东西
function* gen() {
const a = [3, 5, 6];
for (let [key, value] of a){
yield [key, value];
}
}
for (let [i, x] of gen()){
console.log(i, x);
}
实际上,生成器的工作方式与普通的可移植数据结构略有不同。 只是为了好玩,如果你想从某个生成器中得到索引和值,你可以,如果你得到的东西确实有索引的话。你不能放弃你需要的任何东西
function* gen() {
const a = [3, 5, 6];
for (let [key, value] of a){
yield [key, value];
}
}
for (let [i, x] of gen()){
console.log(i, x);
}
基本上,你想在发电机上使用,但这样不行 但是,您可以轻松地在数组中转换生成器,然后使用
条目
方法:
function* g() {
yield 1; yield 2; yield 3;
}
for (let [i, x] of [...g()].entries()){..}
基本上,你想在发电机上使用,但这样不行 但是,您可以轻松地在数组中转换生成器,然后使用
条目
方法:
function* g() {
yield 1; yield 2; yield 3;
}
for (let [i, x] of [...g()].entries()){..}
请参阅“一般情况下的易受攻击性”
entries()
用于类似映射的对象,而生成器不是(您不能执行g()[0]
)。生成器不会创建整个数组。每次调用next
时,它们都会运行函数的另一次迭代。发电机通常是无限的。这就是entries
函数不能很好地用于代码的原因之一。请参阅“一般情况下的iterables”entries()
用于类似映射的对象,而生成器不是(您不能执行g()[0]
)。生成器不会创建整个数组。每次调用next
时,它们都会运行函数的另一次迭代。发电机通常是无限的。这就是entries
函数不能很好地用于代码的原因之一。此外,a
的作用域不局限于生成器函数。此外,a
的作用域不局限于生成器函数。一旦生成器转换为数组,只用于迭代(在大多数情况下,这是不可能的,因为生成器可以是无限的),生成器的点丢失了IMHO。确切地说。那么使用生成器有什么用呢:p这是一个完美有效的场景(请参见基本相同的场景);如果我们想使用像entries
这样的方法,那是最可行的选择。否则,我完全同意最初的问题是有缺陷的,因为生成器具有不同的数据结构,它们应该以不同的方式使用。与平面数组相比,使用生成器的意义是多方面的。您不必计算所有内容预先-而不是数组-但仅当调用生成器时:您可能希望在将生成器转换为仅用于迭代的数组后,为迭代生成生成器的“快照”,而不是“活动列表”(例如,静态节点列表和活动htmlcollection之间的差异)等(在大多数情况下,这是不可能的,因为生成器可以是无限的),生成器的点丢失了IMHO。确切地说。那么使用生成器有什么用呢:p这是一个完美有效的场景(请参见基本相同的场景);如果我们想使用像entries
这样的方法,那是最可行的选择。否则,我完全同意最初的问题是有缺陷的,因为生成器具有不同的数据结构,它们应该以不同的方式使用。与平面数组相比,使用生成器的意义是多方面的。您不必计算所有内容预先-而不是数组-但仅当调用生成器时:您可能希望为迭代生成生成器的“快照”,而不是“活动列表”(例如,静态节点列表和活动htmlcollection之间的差异),等等。