JavaScript 可迭代对象

可迭代对象是可以被迭代的对象(如数组)。

可迭代对象可以通过简单高效的代码访问。

可迭代对象可以使用 for..of 循环进行迭代。

for..of 循环

for..of 语句用于遍历可迭代对象的元素。

సంకేతం

for (వెరియబుల్ of iterable) {
  // 要执行的代码块
}

సమాచారం

సమాచారం సులభంగా అర్థం చేసుకోవచ్చు.

ఇది కేవలం ఒక పదం చుట్టూ వెలుపలికి వెళ్ళు అని కోరుతుంది.

కొన్ని సాధారణ ఉదాహరణలు ఇక్కడ ఉన్నాయి:

  • ప్రక్రియల పై చుట్టూ వెలుపలికి వెళ్ళు:
  • ప్రక్రియల పై చుట్టూ వెలుపలికి వెళ్ళు:

ప్రక్రియల పై చుట్టూ వెలుపలికి వెళ్ళు:

可以使用 for..of మాదిరి పై ప్రక్రియల ఎలిమెంట్స్ పై చుట్టూ వెలుపలికి వెళ్ళు:

实例

const name = "W3Schools";
for (const x of name) {
  // 要执行的代码块
}

亲自试一试

ప్రక్రియల పై చుట్టూ వెలుపలికి వెళ్ళు:

可以使用 for..of మాదిరి పై ప్రక్రియల ఎలిమెంట్స్ పై చుట్టూ వెలుపలికి వెళ్ళు:

ఉదాహరణ 1

const letters = ["a","b","c"];
for (const x of letters) {
  // 要执行的代码块
}

亲自试一试

ఉదాహరణ 2

const numbers = [2,4,6,8];
for (const x of numbers) {
  // 要执行的代码块
}

亲自试一试

సెట్ పై చుట్టూ వెలుపలికి వెళ్ళు:

可以使用 for..of సెట్ మొత్తం ఎలిమెంట్స్ పై చుట్టూ వెలుపలికి వెళ్ళు:

实例

const letters = new Set(["a","b","c"]);
for (const x of letters) {
  // 要执行的代码块
}

亲自试一试

注释:我们将在后续章节中详细介绍 Set 和 Map。

遍历 Map

可以使用 for..of 循环遍历 Map 的元素:

实例

const fruits = new Map([
  ["apples", 500],
  ["bananas", 300],
  ["oranges", 200]
]);
for (const x of fruits) {
  // 要执行的代码块
}

亲自试一试

JavaScript 迭代器

迭代器协议定义了如何从对象中生成一系列值

当对象实现了 next() 方法时,它就成为迭代器

next() 方法必须返回一包含两个属性的对象:

  • value(下一个值)
  • done(true 或 false)
value

迭代器返回的值。

如果 done 为 true,则可以省略。

done

如果迭代器已完成,则为 true。

如果迭代器生成了新值,则为 false。

注意:

从技术上讲,可迭代对象必须实现 Symbol.iterator 方法。

字符串、数组、TypedArray、Map 和 Set 都是可迭代对象,因为它们的原型对象具有 Symbol.iterator 方法。

పద్ధతి కరుణాత్మక వస్తువు

ఈ ఉదాహరణలో ఒక పద్ధతి కరుణాత్మక వస్తువు ప్రదర్శించబడింది, ఇది ఎప్పటికీ ముగించబడదు, ప్రతి సారి కాల్ చేయబడినప్పుడు next() అన్నింటికీ 10, 20, 30, 40, ... అందిస్తాయి అని నిర్ణయించబడింది:

实例

// పద్ధతి కరుణాత్మక వస్తువు సృష్టించండి
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      return { value: n, done: false };
    }
  };
}
// కరుణాత్మక వస్తువు సృష్టించండి
const n = myNumbers();
n.next(); // 10 అందిస్తుంది
n.next(); // 20 అందిస్తుంది
n.next(); // 30 అందిస్తుంది

亲自试一试

ప్రశ్న:

పద్ధతి కరుణాత్మక వస్తువులు జావాస్క్రిప్ట్ పద్ధతులను మద్దతు ఇవ్వవు for..of మార్గాన్ని.

ద్వారా for..of మార్గాన్ని మద్దతు ఇస్తాయి

జావాస్క్రిప్ట్ కరుణాత్మక వస్తువులు కరుణాత్మక మంది మార్గాన్ని కలిగి ఉంటాయి Symbol.iterator వాటిని అందించే వాటిని.

Symbol.iterator ఒక వాటిని అందించే వాటిని. next() మంది ఫంక్షన్.

ఉపయోగించవచ్చు ఈ కోడ్ ద్వారా కరుణాత్మక వస్తువులను ఇటీరేట్ చేయండి:

for (const x of iterable) { }

实例

// 创建一个对象
myNumbers = {};
// 使其可迭代
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if (n == 100) { done = true; }
      return { value: n, done: done };
    }
  };
};
// 现在可以使用 for..of
for (const num of myNumbers) {
  // 任意代码
}

亲自试一试

Symbol.iterator 方法会被 for..of 自动调用。

但我们也可以手动调用它:

实例

let iterator = myNumbers[Symbol.iterator]();
while (true) {
  const result = iterator.next();
  if (result.done) break;
  // 任意代码
}

亲自试一试