javascript中array.entries()的目的是什么?

时间:2017-09-11 15:36:31

标签: javascript arrays iterator

如果数组本身是迭代的话,我无法理解为什么array.entries存在?

如果我可以使用具有简单数组的可迭代使用者(例如,[1,2,3])那么为什么需要将数组转换为数组迭代器?

我想不出这个函数在现实世界中有用的任何例子。请有人提供一个示例,说明可能使用array.entries()的原因以及原因?

4 个答案:

答案 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;
  }
}

Source

答案 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);