将数组转换为迭代器
Convert array to iterator
如何将数组转换为迭代器,以便我可以同时调用 next
和 done
来迭代数组的值?
我已经详尽地看到了
an array is an iterable
但它也没有 属性 (const a = [1,2,3]; a.done; // returns undefined
)。
我试过直接访问 Symbol.iterator
(const iter = a[Symbol.iterator];
),但它只是 returns function values()
数组。
您可以使用.entries()方法。
const a = [1, 2, 3];
const iterator = a.entries();
console.log(iterator.next().value, iterator.next().done);
或者,我可以调用从 Symbol.iterator
:
返回的函数
const iter = a[Symbol.iterator]();
const first = iter.next();
我的误解是done
在迭代器上,但它在节点上,可以称为first.done
受约翰回答的启发,我发现了数组上的 values()
方法(这是 Symbol.iterator
在 Jax-p 的回答中返回的方法),它的行为几乎相同,但删除了解构步骤。总结答案:
const a = [1,2,3];
const symbolIterator = a[Symbol.iterator];
const firstSymbolValue = symbolIterator.next();
const valuesIterator = a.values();
const firstValuesValue = valuesIterator.next();
const entriesIterator = a.entries();
const [firstEntriesIndex, firstEntriesValue] = entriesIterator.next();
expect(firstSymbolValue).toBe(1);
expect(firstValuesValue).toBe(1);
expect(firstEntriesValue).toBe(1);
我不确定你想用 a.done
得到什么,但是当调用 next()
时,done
在 iterable protocol 的 return 对象中。
你是对的 a[Symbol.iterator] returns value()
function as it is described at MDN Web Docs Array.prototype[@@iterator]()
但这正是你想要遍历时所需要的带迭代器的数组。你可以看下面的例子:
const arr = [1,2,3];
const eArr = arr[Symbol.iterator]();
console.log(eArr.next().done);
console.log(eArr.next().done);
console.log(eArr.next().done);
console.log(eArr.next().done);
使用 .values() 方法,它 returns 数组元素的迭代器。
如何将数组转换为迭代器,以便我可以同时调用 next
和 done
来迭代数组的值?
我已经详尽地看到了
an array is an iterable
但它也没有 属性 (const a = [1,2,3]; a.done; // returns undefined
)。
我试过直接访问 Symbol.iterator
(const iter = a[Symbol.iterator];
),但它只是 returns function values()
数组。
您可以使用.entries()方法。
const a = [1, 2, 3];
const iterator = a.entries();
console.log(iterator.next().value, iterator.next().done);
或者,我可以调用从 Symbol.iterator
:
const iter = a[Symbol.iterator]();
const first = iter.next();
我的误解是done
在迭代器上,但它在节点上,可以称为first.done
受约翰回答的启发,我发现了数组上的 values()
方法(这是 Symbol.iterator
在 Jax-p 的回答中返回的方法),它的行为几乎相同,但删除了解构步骤。总结答案:
const a = [1,2,3];
const symbolIterator = a[Symbol.iterator];
const firstSymbolValue = symbolIterator.next();
const valuesIterator = a.values();
const firstValuesValue = valuesIterator.next();
const entriesIterator = a.entries();
const [firstEntriesIndex, firstEntriesValue] = entriesIterator.next();
expect(firstSymbolValue).toBe(1);
expect(firstValuesValue).toBe(1);
expect(firstEntriesValue).toBe(1);
我不确定你想用 a.done
得到什么,但是当调用 next()
时,done
在 iterable protocol 的 return 对象中。
你是对的 a[Symbol.iterator] returns value()
function as it is described at MDN Web Docs Array.prototype[@@iterator]()
但这正是你想要遍历时所需要的带迭代器的数组。你可以看下面的例子:
const arr = [1,2,3];
const eArr = arr[Symbol.iterator]();
console.log(eArr.next().done);
console.log(eArr.next().done);
console.log(eArr.next().done);
console.log(eArr.next().done);
使用 .values() 方法,它 returns 数组元素的迭代器。