Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6用于带钥匙和发电机的of_Javascript - Fatal编程技术网

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之间的差异),等等。