如果数组本身是迭代的话,我无法理解为什么array.entries存在?
如果我可以使用具有简单数组的可迭代使用者(例如,[1,2,3])那么为什么需要将数组转换为数组迭代器?
我想不出这个函数在现实世界中有用的任何例子。请有人提供一个示例,说明可能使用array.entries()的原因以及原因?
答案 0 :(得分:2)
方法Array.prototype.entries()允许您使用Iterator对象,就像您已经正确指出的那样。
主要方面是您可以使用例如.next()
方法。您可以在MDN JavaScript documentation中阅读有关迭代器和迭代的更多信息。如果您想在不使用循环的情况下循环遍历数组,这将非常有用。
这也让你可以像这样制作一个无限迭代器:
var ids = {
*[Symbol.iterator]: function () {
var index = 0;
return {
next: function () {
return { value: 'id-' + index++, done: false };
}
};
}
};
var counter = 0;
for (var value of ids) {
console.log(value);
if (counter++ > 1000) { // let's make sure we get out!
break;
}
}
答案 1 :(得分:2)
使用迭代器对象最重要的方面是,您可以更好地控制迭代器对象的循环。
示例 你有一个数组
let userName = ["John", "Sam", "Michael"];
您只想在开始时向用户显示第一个用户名(John),但是此后,您提供了功能,用户可以单击显示下一个用户名(Sam)的按钮。
因此,如果它是一个迭代器对象,则具有 .next()方法,该方法可在每次用户单击时调用,并在插入操作中提供一个下一个值,因为它会记住前一个指针。
let iteratorUserName = userName.entries();
用户点击的按钮
button.onclick = () => {
let nextUserName = iteratorUserName.next();
if(!nextUserName.done) {
return nextUserName.value;
} else {
alert("No User");
}
}
答案 2 :(得分:0)
例如:
var iter = [].entries.call("stackoverflow")
iter.next(); // { value: [0, "s"], done: false }
iter.next(); // { value: [1, "t"], done: false }
...
适用于任何类似数组的对象,例如字符串和节点列表。它可能不是最重要的功能,但拥有它并没有什么坏处。
答案 3 :(得分:0)
我喜欢
for(const [i,v] of [1,2,3].entries()) alert(i,v);