Ø´ÛØ¡ÙØ§Û ØÙÙÙâÙ¾Ø°ÛØ± تعÙ
ÛÙ
Û Ø§Ø² آراÛÙâÙØ§ ÙØ³ØªÙد. اÛÙ Ù
ÙÙÙÙ
Û Ø§Ø³Øª ک٠ب٠Ù
ا اجاز٠Ù
ÛâØ¯ÙØ¯ تا ÙØ± Ø´ÛØ¡Ø§Û را در ØÙÙÙ for..of ÙØ§Ø¨Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
ÙØ·Ø¹Ø§ آراÛÙâÙØ§ ØÙÙÙâÙ¾Ø°ÛØ± ÙØ³ØªÙد. ا٠ا Ø´ÛØ¡ÙØ§Û Ø¯Ø±ÙÙâØ³Ø§Ø®Øª دÛÚ¯Ø±Û ÙÙ ÙØ³ØªÙد Ú©Ù ØÙÙÙâÙ¾Ø°ÛØ±Ùد. Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ رشتÙâÙØ§ ÙÙ ØÙÙÙâÙ¾Ø°ÛØ±Ùد.
اگر ÛÚ© Ø´ÛØ¡ Ø¨Ù Ø·ÙØ± ÙÙÛ Ø¢Ø±Ø§ÛÙ ÙØ¨Ø§Ø´Ø¯Ø اÙ
ا ÛÚ© Ù
جÙ
ÙØ¹Ù (ÙÛØ³Øª ÛØ§ دستÙ) از ÚÛØ²Ùا را ÙØ´Ø§Ù Ø¯ÙØ¯Ø for..of ÛÚ© سÛÙØªÚ©Ø³ عاÙÛ Ø¨Ø±Ø§Û ØÙÙÙâØ²Ø¯Ù Ø¯Ø±ÙÙ Ø¢Ù Ø§Ø³ØªØ Ù¾Ø³ Ø¨ÛØ§ÛÛØ¯ ببÛÙÛÙ
ÚÚ¯ÙÙÙ ÚÙÛÙ Ú©Ø§Ø±Û Ø±Ø§ Ø§ÙØ¬Ø§Ù
دÙÛÙ
.
ÙÛÚÚ¯Û Symbol.iterator
٠ا Ù ÛâØªÙØ§ÙÛÙ Ø¨Ù Ø±Ø§ØØªÛ Ù ÙÙÙÙ ØÙÙÙâÙ¾Ø°ÛØ±Ùا را با Ø§ÛØ¬Ø§Ø¯ ØÙÙÙâÙ¾Ø°ÛØ± Ø®ÙØ¯Ù ا٠درک Ú©ÙÛÙ .
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ù
ا ÛÚ© Ø´ÛØ¡ دارÛÙ
ک٠آراÛÙ ÙÛØ³ØªØ اÙ
ا Ø¨Ø±Ø§Û Ø§Ø³ØªÙØ§Ø¯Ù در for..of Ù
ÙØ§Ø³Ø¨ است.
Ù
اÙÙØ¯ ÛÚ© Ø´ÛØ¡ range ک٠بازÙâØ§Û Ø§Ø² اعداد را ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯:
let range = {
from: 1,
to: 5
};
// :کار Ú©ÙØ¯ for..of Ù
ÛâØ®ÙØ§ÙÛÙ
Ú©Ù
// for(let num of range) ... num=1,2,3,4,5
Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù Ø´ÛØ¡ range را ØÙÙÙâÙ¾Ø°ÛØ± Ú©ÙÛÙ
(٠ب٠اÛÙ ØªØ±ØªÛØ¨ بگذارÛÙ
for..of کار Ú©ÙØ¯) Ù
ا ÙÛØ§Ø² دارÛÙ
Ú©Ù ÛÚ© Ù
تد ب٠اسÙ
Symbol.iterator را Ø¨Ù Ø´ÛØ¡ اضاÙÙ Ú©ÙÛÙ
( ÛÚ© سÙ
ب٠خاص درÙ٠ساخت Ú©Ù ÙÙØ· Ø¨Ø±Ø§Û Ø§Û٠کار است).
- زÙ
اÙÛ Ú©Ù
for..ofØ´Ø±ÙØ¹ Ù ÛâØ´ÙØ¯Ø ٠تد را ÛÚ© بار صدا Ù ÛâØ²ÙØ¯ (ÛØ§ اگر Ù¾ÛØ¯Ø§ ÙØ´Ùد Ø§Ø±ÙØ± Ù ÛâØ¯ÙØ¯). ٠تد Ø¨Ø§ÛØ¯ ÛÚ© ØÙÙÙâØ²ÙÙØ¯Ù را Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯ â Ø´ÛØ¡Ø§Û Ú©Ù Ù ØªØ¯nextرا دارد. - ÙÙ
ÛÙØ·Ùر ر٠ب٠جÙÙØ
for..ofتÙÙØ§ با Ø´ÛØ¡ Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù شد٠کار Ù ÛâÚ©ÙØ¯. - زÙ
اÙÛ Ú©Ù
for..ofÙ ÙØ¯Ø§Ø± Ø¨Ø¹Ø¯Û Ø±Ø§ ÙÛØ§Ø² Ø¯Ø§Ø±Ø¯Ø Ø±ÙÛ Ø¢Ù Ø´ÛØ¡next()را صدا Ù ÛâØ²ÙØ¯. - ÙØªÛجÙ
next()Ø¨Ø§ÛØ¯ ب٠شکÙ{done: Boolean, value: any}باشد Ú©Ùdone=trueب٠٠عÙÛ Ù¾Ø§ÛØ§Ù ØÙÙÙâØ²Ø¯Ù Ø§Ø³ØªØ Ø¯Ø± ØºÛØ± اÛÙ ØµÙØ±ØªvalueÙ ÙØ¯Ø§Ø± Ø¨Ø¹Ø¯Û Ø®ÙØ§Ùد Ø¨ÙØ¯.
اÛÙØ¬Ø§ Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©Ø§Ù
Ù range را ب٠ÙÙ
را٠Ù
ÙØ§ØØ¸Ø§Øª دارÛÙ
:
let range = {
from: 1,
to: 5
};
// 1. در ابتدا اÛÙ Ù
تد صدا زد٠Ù
ÛâØ´ÙØ¯ for..of با صدازدÙ
range[Symbol.iterator] = function() {
// :اÛÙ Ù
تد Ø´ÛØ¡ ØÙÙÙâØ²ÙÙØ¯Ù را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯...
// 2. ÙÙØ· با اÛÙ ØÙÙÙâØ²ÙÙØ¯Ù کار Ù
ÛâÚ©ÙØ¯Ø ک٠از Ø¢Ù Ù
ÙØ¯Ø§Ø± Ø¨Ø¹Ø¯Û Ø±Ø§ Ø¯Ø±Ø®ÙØ§Ø³Øª Ù
ÛâÚ©ÙØ¯ for..of ØÙÙ
ÛÙØ·Ùر ر٠ب٠جÙÙ
return {
current: this.from,
last: this.to,
// 3. ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâØ´ÙØ¯ for..of در ÙØ± Ø¯ÙØ± ØÙÙÙ ØªÙØ³Ø· next()
next() {
// 4. Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯ {done:..., value:...} اÛÙ Ù
تد Ø¨Ø§ÛØ¯ Ù
ÙØ¯Ø§Ø± را ب٠عÙÙØ§Ù ÛÚ© Ø´ÛØ¡
if (this.current <= this.last) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
};
// !ØØ§Ùا کار Ù
ÛâÚ©ÙØ¯
for (let num of range) {
alert(num); // 1, then 2, 3, 4, 5
}
ÙØ·Ùا Ø®Ø§ØµÛØª اصÙÛ ØÙÙÙâÙ¾Ø°ÛØ±Ùا را در ÙØ¸Ø± Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯: تÙÚ©ÛÚ© ÙØ¸Ø§ÛÙ.
- Ø´ÛØ¡
rangeØ¨Ù Ø®ÙØ¯Û Ø®ÙØ¯ Ø¯Ø§Ø±Ø§Û Ù ØªØ¯next()ÙÛØ³Øª. - Ø¨Ù Ø¬Ø§Û Ø¢ÙØ Ø´ÛØ¡ دÛÚ¯Ø±Û Ú©Ù Ø¨Ù Ø¢Ù Â«ØÙÙÙâØ²ÙÙØ¯Ù» ÙÙ
Ù
ÛâÚ¯ÙÛÙØ¯ با ÙØ±Ø§Ø®ÙاÙÛ
range[Symbol.iterator]()٠٠تدnext()Ø¢ÙØ Ù ÙØ¯Ø§Ø±Ùا را Ø¨Ø±Ø§Û ØÙÙÙâØ²Ø¯Ù Ø§ÛØ¬Ø§Ø¯ Ù ÛâÚ©ÙØ¯.
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ Ø´ÛØ¡ ØÙÙÙâØ²ÙÙØ¯Ù از Ø´ÛØ¡Ø§Û ک٠در Ø¢Ù ØÙÙÙ Ù ÛâØ²ÙØ¯ جدا است.
Ø¨Ù Ø·ÙØ± ÙÙÛØ Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
Ø¢ÙÙØ§ را ØªØ±Ú©ÛØ¨ Ú©ÙÛÙ
٠از Ø®ÙØ¯ range ب٠عÙÙØ§Ù ØÙÙÙâØ²ÙÙØ¯Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
تا کد سادÙâØªØ± Ø´ÙØ¯.
٠اÙÙØ¯ اÛÙ:
let range = {
from: 1,
to: 5,
[Symbol.iterator]() {
this.current = this.from;
return this;
},
next() {
if (this.current <= this.to) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
for (let num of range) {
alert(num); // 1, then 2, 3, 4, 5
}
ØØ§Ùا range[Symbol.iterator]() Ø®ÙØ¯ Ø´ÛØ¡ range را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯: اÛÙ Ø´ÛØ¡ Ø¯Ø§Ø±Ø§Û Ù
تد Ù
ÙØ±Ø¯ ÙÛØ§Ø² next() است Ù ÙØ±Ø§ÛÙØ¯ Ú©ÙÙÙÛ ØÙÙÙâØ²Ø¯Ù Ø±Ø§ در this.current ب٠خاطر Ù
ÛâØ³Ù¾Ø§Ø±Ø¯. Ú©ÙØªØ§ÙâØªØ± Ø§Ø³ØªØ Ø¨ÙÙ. ٠گاÙÛ Ø§ÙÙØ§Øª اÛÙ ÙÙ
Ø®ÙØ¨ است.
اÙ
ا اÙ
ØªÛØ§Ø²Û Ù
ÙÙÛ ÙØ¬Ùد دارد: ØØ§Ùا ØºÛØ± Ù
Ù
ک٠است ک٠د٠ØÙÙÙ for..of Ø¨ØªÙØ§ÙÙØ¯ Ø¨Ù Ø·ÙØ± ÙÙ
زÙ
ا٠در Ø´ÛØ¡ ØÙÙ٠بزÙÙØ¯ ÚÙ٠آÙÙØ§ ÙØ¶Ø¹Ûت ØÙÙÙâØ²Ø¯Ù Ø±Ø§ ب٠اشتراک Ù
ÛâÚ¯Ø°Ø§Ø±ÙØ¯ ٠آ٠ÙÙ
ب٠دÙÛ٠اÛÙک٠تÙÙØ§ ÛÚ© ØÙÙÙâØ²ÙÙØ¯Ù ÙØ¬Ùد دارد â Ø®Ùد Ø´ÛØ¡Ùا. اÙ
ا د٠for-of ÙÙ
زÙ
Ø§Ù Ø¨Ù ÙØ¯Ø±Øª Ù¾ÛØ´ Ù
ÛâØ¢ÛØ¯Ø ØØªÛ در Ø³ÙØ§Ø±ÛÙÙØ§Û async (ÙÙ
گاÙ
âØ³Ø§Ø²Û).
ØÙÙÙâØ²ÙÙØ¯ÙâÙØ§Û بÛâÙÙØ§Ûت ÙÙ
Ù
Ù
ک٠است Ø§ÛØ¬Ø§Ø¯ Ø´ÙÙØ¯. Ø¨Ø±Ø§Û Ù
Ø«ÙØ range Ø¨Ù Ø§Ø²Ø§Û range.to = Infinity بÛâÙÙØ§Ûت Ù
ÛâØ´ÙØ¯. ÛØ§ Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
ÛÚ© Ø´ÛØ¡ ØÙÙÙâÙ¾Ø°ÛØ± را Ú©Ù ÛÚ© Ø¯ÙØ¨Ø§Ù٠بÛâÙÙØ§Ûت از شب٠اعداد Ø§ÛØ¬Ø§Ø¯ Ù
ÛâÚ©ÙØ¯ بسازÛÙ
. Ù
ÛâØªÙØ§Ùد Ù
ÙÛØ¯ ÙÙ
باشد.
ÙÛÚ Ù
ØØ¯ÙØ¯ÛØªÛ Ø¨Ø±Ø§Û next ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯Ø اÛÙ Ù
تد Ù
ÛâØªÙØ§Ùد Ù
ÙØ¯Ø§Ø±ÙØ§Û Ø¨ÛØ´ØªØ± Ù Ø¨ÛØ´ØªØ±Û Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯ ٠اÛÙ Ø¹Ø§Ø¯Û Ø§Ø³Øª.
ÙØ·Ø¹Ø§Ø ØÙÙÙ for..of درÙÙ ÚÙÛÙ ØÙÙÙâÙ¾Ø°ÛØ±Û Ù¾Ø§ÛØ§ÙâÙØ§Ù¾Ø°Ûر Ø®ÙØ§Ùد Ø¨ÙØ¯. اÙ
ا Ù
ÛâØªÙØ§ÙÛÙ
آ٠را ÙÙ
ÛØ´Ù با break Ù
تÙÙÙ Ú©ÙÛÙ
.
رشت٠ØÙÙÙâÙ¾Ø°ÛØ± است
آراÛÙâÙØ§ ٠رشتÙâÙØ§ ب٠عÙÙØ§Ù ØÙÙÙâÙ¾Ø°ÛØ±ÙØ§Û Ø¯Ø±Ù٠ساخت Ø¨ÛØ´ØªØ±ÛÙ Ø§Ø³ØªÙØ§Ø¯Ù را Ø¯Ø§Ø±ÙØ¯.
Ø¨Ø±Ø§Û ÛÚ© Ø±Ø´ØªÙØ for..of در Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§Û Ø¢Ù ØÙÙÙ Ù
ÛâØ²ÙØ¯:
for (let char of "test") {
// ÚÙØ§Ø± بار اجرا Ù
ÛâØ´ÙØ¯: ÛÚ© بار Ø¨Ø±Ø§Û ÙØ± کاراکتر
alert( char ); // t, then e, then s, then t
}
٠با Ø¬ÙØªâÙØ§Û جاÛÚ¯ÛØ± Ø¨Ù Ø¯Ø±Ø³ØªÛ Ú©Ø§Ø± Ù ÛâÚ©ÙØ¯!
let str = 'ð³ð';
for (let char of str) {
alert( char ); // ð³, and then ð
}
صدا زد٠ÛÚ© ØÙÙÙâØ²ÙÙØ¯Ù Ø¨Ù Ø·ÙØ± ض٠ÙÛ
Ø¨Ø±Ø§Û ÙÙ٠ع٠ÛÙâØªØ±Ø Ø¨ÛØ§ÛÛØ¯ ببÛÙÛÙ ÚÚ¯ÙÙ٠از ØÙÙÙâØ²ÙÙØ¯Ù Ø¨Ù Ø·ÙØ± ض٠ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ .
Ù
ا در ÛÚ© رشت٠دÙÛÙØ§ ب٠ÙÙ
Ø§Ù Ø±ÙØ´ for..of ØÙÙÙ Ù
ÛâØ²ÙÛÙ
Ø Ø§Ù
ا با ÙØ±Ø§Ø®ÙاÙÛâÙØ§Û Ù
ستÙÛÙ
. اÛ٠کد ÛÚ© ØÙÙÙâØ²ÙÙØ¯Ù Ø¨Ø±Ø§Û Ø±Ø´ØªÙ Ø§ÛØ¬Ø§Ø¯ Ù
ÛâÚ©ÙØ¯ Ù Ù
ÙØ¯Ø§Ø±Ùا را از Ø¢Ù Ø¨Ù ØµÙØ±Øª «دستÛ» Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯:
let str = "Hello";
// کار Ù
شابÙÛ Ø¨Ø§ ØÙÙ٠پاÛÛÙ Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯
// for (let char of str) alert(char);
let iterator = str[Symbol.iterator]();
while (true) {
let result = iterator.next();
if (result.done) break;
alert(result.value); // ÙØ± کاراکتر را ÛÚ©Û ÛÚ©Û ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯
}
اÛÙ Ø±ÙØ´ Ø¨Ù ÙØ¯Ø±Øª ÙÛØ§Ø² Ù
ÛâØ´ÙØ¯Ø اÙ
ا ÙØ³Ø¨Øª ب٠for..of ب٠Ù
ا Ú©ÙØªØ±Ù Ø¨ÛØ´ØªØ±Û بر رÙÛ ÙØ±Ø§ÛÙØ¯ Ù
ÛâØ¯ÙØ¯. Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
ÙØ±Ø§ÛÙØ¯ ØÙÙÙâØ²Ø¯Ù Ø±Ø§ بشکاÙÛÙ
: Ù
ÙØ¯Ø§Ø±Û ØÙÙ٠بزÙÛÙ
Ø Ø³Ù¾Ø³ Ù
تÙÙÙ Ø´ÙÛÙ
Ø Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù
دÙÛÙ
٠بعدا اداÙ
٠دÙÛÙ
.
ØÙÙÙâÙ¾Ø°ÛØ±Ùا ٠شب٠آراÛÙâÙØ§
Ø¯Ù Ø§ØµØ·ÙØ§Ø Ø±Ø³Ù Û Ú©Ù Ø´Ø¨Û٠ب٠ÙÙ ÙØ³ØªÙد ا٠ا Ø¨Ø³ÛØ§Ø± ØªÙØ§Ùت Ø¯Ø§Ø±ÙØ¯. ÙØ·Ùا ٠ط٠ئ٠شÙÛØ¯ ک٠آÙÙØ§ را Ø¨Ù Ø®ÙØ¨Û Ù ØªÙØ¬Ù Ù ÛâØ´ÙÛØ¯ تا از Ú¯ÛØ¬âØ´Ø¯Ù Ø¯ÙØ± ب٠اÙÛØ¯.
- ØÙÙÙâÙ¾Ø°ÛØ±Ùا Ø´ÛØ¡ÙاÛÛ ÙØ³ØªÙد Ú©Ù Ù
تد
Symbol.iteratorرا Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ù ÛâÚ©ÙÙØ¯Ø درست ٠اÙÙØ¯ ÚÛØ²Û Ú©Ù Ø¨Ø§ÙØ§ Ú¯ÙØªÙ شد. - شب٠آراÛÙâÙØ§ Ø´ÛØ¡ÙاÛÛ ÙØ³ØªÙد Ú©Ù Ø¯Ø§Ø±Ø§Û Ø§ÛÙØ¯Ú©Ø³ Ù
lengthÙØ³ØªÙØ¯Ø Ù¾Ø³ Ø¢ÙÙØ§ شبÛ٠آراÛÙ Ø¨ÙØ¸Ø± Ù ÛâØ±Ø³ÙØ¯.
ز٠اÙÛ Ú©Ù Ù Ø§ از Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù Ú©Ø§Ø±ÙØ§ÛÛ Ø¯Ø± Ù Ø±ÙØ±Ú¯Ø± ÛØ§ ÙØ± Ù ØÛØ· دÛÚ¯Ø±Û Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÛÙ Ø Ù Ù Ú©Ù Ø§Ø³Øª با Ø´ÛØ¡ÙاÛÛ Ø±ÙØ¨Ø±Ù Ø´ÙÛÙ Ú©Ù ÙÙ ØÙÙÙâÙ¾Ø°ÛØ± ÙØ³ØªÙد Ù Ù٠شب٠آراÛÙ Ù ÛØ§ ÙØ± دÙ.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ رشتÙâÙØ§ ÙÙ
ØÙÙÙâÙ¾Ø°ÛØ± ÙØ³ØªÙد (for..of رÙÛ Ø¢ÙÙØ§ کار Ù
ÛâÚ©ÙØ¯) Ù ÙÙ
شب٠آراÛÙ ÙØ³ØªÙد (Ø¢ÙÙØ§ اÛÙØ¯Ú©Ø³ Ø¹Ø¯Ø¯Û Ù length Ø¯Ø§Ø±ÙØ¯).
ا٠ا ÛÚ© ØÙÙÙâÙ¾Ø°ÛØ± ٠٠ک٠است شب٠آراÛÙ ÙØ¨Ø§Ø´Ø¯. برعکس Ø¢Ù Ù٠٠٠ک٠است ÛØ¹ÙÛ ÛÚ© شب٠آراÛ٠٠٠ک٠است ØÙÙÙâÙ¾Ø°ÛØ± ÙØ¨Ø§Ø´Ø¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§ range ØÙÙÙâÙ¾Ø°ÛØ± است اÙ
ا شب٠آراÛÙ ÙÛØ³ØªØ ÚÙÙ ÙÛÚÚ¯ÛâÙØ§Û اÛÙØ¯Ú©Ø³Û Ù length ÙØ¯Ø§Ø±Ø¯.
اÛÙØ¬Ø§ ÙÙ ÛÚ© Ø´ÛØ¡ دارÛ٠ک٠شب٠آراÛ٠است ا٠ا ØÙÙÙâÙ¾Ø°ÛØ± ÙÛØ³Øª:
let arrayLike = { // است => شب٠آراÛÙ length Ø¯Ø§Ø±Ø§Û Ø§ÛÙØ¯Ú©Ø³ Ù
0: "Hello",
1: "World",
length: 2
};
// (ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯ Symbol.iterator) Ø§Ø±ÙØ±
for (let item of arrayLike) {}
ØÙÙÙâÙ¾Ø°ÛØ±Ùا ٠شب٠آراÛÙâÙØ§ ÙØ± د٠Ù
عÙ
ÙÙØ§ آراÛÙ ÙÛØ³ØªÙØ¯Ø Ø¢ÙÙØ§ Ø¯Ø§Ø±Ø§Û Ù
ØªØ¯ÙØ§Û pushØ pop Ù⦠ÙÛØ³ØªÙد. اگر Ù
ا ÛÚ© Ø´ÛØ¡ داشت٠باشÛÙ
Ù Ø¨Ø®ÙØ§ÙÛÙ
با Ø¢Ù Ù
اÙÙØ¯ ÛÚ© آراÛ٠کار Ú©ÙÛÙ
Ø Ø§ÛÙ Ù
ÙØ¶Ùع Ø®ÙØ¨ ÙÛØ³Øª. Ù
Ø«ÙØ§ Ù
ا Ø¨Ø®ÙØ§ÙÛÙ
در range از Ù
ØªØ¯ÙØ§Û آراÛÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. ÚÚ¯ÙÙ٠اÛ٠کار را Ø§ÙØ¬Ø§Ù
دÙÛÙ
Ø
٠تد Array.from
ÛÚ© ٠تد Ú©ÙÛ Array.from ÙØ¬Ùد دارد Ú©Ù ÛÚ© ØÙÙÙâÙ¾Ø°ÛØ± ÛØ§ شب٠آراÛÙ Ù ÛâÚ¯ÛØ±Ø¯ Ù ÛÚ© آراÛÙ ÙØ§ÙØ¹Û Ø§Ø² آ٠تشکÛÙ Ù ÛâØ¯ÙØ¯. سپس ٠ا Ù ØªØ¯ÙØ§Û آراÛ٠را رÙÛ Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙÛÙ .
Ø¨Ø±Ø§Û Ù Ø«Ù:
let arrayLike = {
0: "Hello",
1: "World",
length: 2
};
let arr = Array.from(arrayLike); // (*)
alert(arr.pop()); // World (Ù
تد کار کرد)
Array.from در خط (*) Ø´ÛØ¡ را Ù
ÛâÚ¯ÛØ±Ø¯Ø آ٠را Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù ØÙÙÙâÙ¾Ø°ÛØ± ÛØ§ شب٠آراÛ٠باشد Ø¨Ø±Ø±Ø³Û Ù
ÛâÚ©ÙØ¯Ø سپس ÛÚ© آراÛÙ Ø¬Ø¯ÛØ¯ Ù
ÛâØ³Ø§Ø²Ø¯ ٠تÙ
اÙ
اÙÙ
اÙâÙØ§ را در Ø¢Ù Ú©Ù¾Û Ù
ÛâÚ©ÙØ¯.
Ø§ØªÙØ§Ù ٠شابÙÛ Ø¨Ø±Ø§Û ØÙÙÙâÙ¾Ø°ÛØ± Ù ÛâØ§ÙØªØ¯:
// از Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§ Ú¯Ø±ÙØªÙ شد٠است range ÙØ±Ø¶ Ù
ÛâÚ©ÙÛÙ
Ú©Ù
let arr = Array.from(range);
alert(arr); // 1,2,3,4,5 (آراÛ٠کار Ù
ÛâÚ©ÙØ¯ toString تبدÛÙ)
سÛÙØªÚ©Ø³ کاÙ
Ù Ø¨Ø±Ø§Û Array.from Ø¨Ù Ø§Ø¬Ø§Ø²Ù ÙØ±Ø§ÙÙ
کرد٠ÛÚ© تابع «طراØÛ» ÙÙ
Ù
ÛâØ¯ÙØ¯:
Array.from(obj[, mapFn, thisArg])
آرگÙÙ
Ø§Ù Ø§Ø®ØªÛØ§Ø±Û دÙÙ
mapFn Ù
ÛâØªÙØ§Ùد ØªØ§Ø¨Ø¹Û Ø¨Ø§Ø´Ø¯ ک٠رÙÛ ØªÙ
اÙ
اÙÙ
اÙâÙØ§ ÙØ¨Ù از اÛÙک٠ب٠آراÛ٠اضاÙÙ Ø´ÙÙØ¯ اعÙ
ا٠Ù
ÛâØ´ÙØ¯ Ù thisArg اجاز٠Ù
ÛâØ¯ÙØ¯ Ú©Ù Ø¨Ø±Ø§Û Ø¢Ù this ÙØ±Ø§Ø± دÙÛÙ
.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
// از Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§ Ú¯Ø±ÙØªÙ شد٠است range ÙØ±Ø¶ Ù
ÛâÚ©ÙÛÙ
// Ø¨Ù ØªÙØ§Ù 2 Ø±Ø³Ø§ÙØ¯Ù ÙØ± عدد
let arr = Array.from(range, num => num * num);
alert(arr); // 1,4,9,16,25
اÛÙØ¬Ø§ Ù
ا از Array.from Ø¨Ø±Ø§Û ØªØ¨Ø¯ÛÙ ÛÚ© رشت٠ب٠آراÛÙâØ§Û Ø§Ø² Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÛÙ
:
let str = 'ð³ð';
// ب٠آراÛÙâØ§Û Ø§Ø² Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§ str ØªÙØ³ÛÙ
let chars = Array.from(str);
alert(chars[0]); // ð³
alert(chars[1]); // ð
alert(chars.length); // 2
Ø¨Ø±Ø®ÙØ§Ù str.splitØ Ø§ÛÙ Ø±ÙØ´ بر اساس Ø·Ø¨ÛØ¹Øª ØÙÙÙâÙ¾Ø°ÛØ±Û رشت٠کار Ù
ÛâÚ©ÙØ¯ ٠ب٠ÙÙ
Û٠دÙÛÙØ درست Ù
اÙÙØ¯ for..ofØ Ø¨Ø§ Ø¬ÙØªâÙØ§Û جاÛÚ¯ÛØ± Ø¨Ù Ø¯Ø±Ø³ØªÛ Ú©Ø§Ø± Ù
ÛâÚ©ÙØ¯.
از ÙØØ§Ø¸ ÙÙÛ Ø§ÛÙ Ù٠کار ٠شابÙÛ Ø±Ø§ Ø§ÙØ¬Ø§Ù Ù ÛâØ¯ÙØ¯:
let str = 'ð³ð';
let chars = []; // ÙÙ
از درÙ٠اÛÙ ØÙÙ٠را اجرا Ù
ÛâÚ©ÙØ¯ Array.from
for (let char of str) {
chars.push(char);
}
alert(chars);
â¦Ø§Ù ا اÛÙ Ø±ÙØ´ Ú©ÙØªØ§ÙâØªØ± است.
Ù
ا ØØªÛ Ù
ÛâØªÙØ§ÙÛÙ
ÛÚ© slice ک٠از Ø¬ÙØªâÙØ§Û جاÛÚ¯ÛØ± آگا٠است را رÙÛ Ø¢Ù Ø¨Ø³Ø§Ø²ÛÙ
:
function slice(str, start, end) {
return Array.from(str).slice(start, end).join('');
}
let str = 'ð³ðð©·¶';
alert( slice(str, 1, 3) ); // ðð©·¶
// Ù
تد اصÙÛ Ø§Ø² Ø¬ÙØªâÙØ§Û جاÛÚ¯ÛØ± Ù¾Ø´ØªÛØ¨Ø§ÙÛ ÙÙ
ÛâÚ©ÙØ¯
alert( str.slice(1, 3) ); // ÚØ±Øª ٠پرت (Ø¯Ù ÙØ·Ø¹Ù از Ø¬ÙØªâÙØ§Û جاÛÚ¯ÛØ± Ù
ØªÙØ§Ùت)
Ø®ÙØ§ØµÙ
Ø´ÛØ¡ÙاÛÛ Ú©Ù Ø¨ØªÙØ§ÙÙØ¯ در for..of Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙÙØ¯Ø ØÙÙÙâÙ¾Ø°ÛØ± ÙØ§Ù
ÛØ¯Ù Ù
ÛâØ´ÙÙØ¯.
- Ø¨Ù Ø·ÙØ± ÙÙÛØ ØÙÙÙâÙ¾Ø°ÛØ±Ùا Ø¨Ø§ÛØ¯ Ù
ØªØ¯Û Ø¨Ù Ø§Ø³Ù
Symbol.iteratorرا Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©ÙÙØ¯.- ÙØªÛØ¬Ù ÙØ±Ø§Ø®ÙاÙÛ
obj[Symbol.iterator]()Ø¨Ø§ÛØ¯ ÛÚ© ØÙÙÙâØ²ÙÙØ¯Ù باشد Ú©Ù ÙØ±Ø§ÛÙØ¯ ØÙÙÙâØ²Ø¯ÙâÙØ§Û Ø¨Ø¹Ø¯Û Ø±Ø§ Ù Ø¯ÛØ±Ûت Ù ÛâÚ©ÙØ¯. - ÛÚ© ØÙÙÙâØ²ÙÙØ¯Ù Ø¨Ø§ÛØ¯ Ù
ØªØ¯Û Ø¨Ù ÙØ§Ù
next()داشت٠باشد Ú©Ù ÛÚ© Ø´ÛØ¡ Ø¨Ù ØµÙØ±Øª{done: Boolean, value: any}را بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯Ø اÛÙØ¬Ø§done:trueÙØ´Ø§Ù دÙÙØ¯Ù Ù¾Ø§ÛØ§Ù ÙØ±Ø§ÛÙØ¯ ØÙÙÙâØ²Ø¯Ù Ø§Ø³ØªØ Ø¯Ø± ØºÛØ± اÛÙ ØµÙØ±ØªvalueÙ ÙØ¯Ø§Ø± Ø¨Ø¹Ø¯Û Ø§Ø³Øª.
- ÙØªÛØ¬Ù ÙØ±Ø§Ø®ÙاÙÛ
- Ù
تد
Symbol.iteratorØªÙØ³Ø·for..ofØ¨Ù ØµÙØ±Øª Ø®ÙØ¯Ú©Ø§Ø± صدا زد٠٠ÛâØ´ÙØ¯ ا٠ا ٠ا Ù ÛâØªÙØ§ÙÛÙ Ø¨Ù Ø·ÙØ± ٠ستÙÛ٠اÛ٠کار را Ø§ÙØ¬Ø§Ù دÙÛÙ . - ØÙÙÙâÙ¾Ø°ÛØ±ÙØ§Û Ø¯Ø§Ø®ÙÛ Ù
اÙÙØ¯ رشتÙâÙØ§ ÛØ§ آراÛÙâÙØ§ ÙÙ
Symbol.iteratorرا Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ù ÛâÚ©ÙÙØ¯. - ØÙÙÙâØ²ÙÙØ¯Ù رشتÙâØ§Û Ø§Ø² Ø¬ÙØªâÙØ§Û جاÛÚ¯ÛØ± آگا٠است.
Ø´ÛØ¡ÙاÛÛ Ú©Ù Ø¯Ø§Ø±Ø§Û ÙÛÚÚ¯ÛâÙØ§Û اÛÙØ¯Ú©Ø³Û Ù length ÙØ³ØªÙد شب٠آراÛÙ ÙØ§Ù
ÛØ¯Ù Ù
ÛâØ´ÙÙØ¯. ÚÙÛÙ Ø´ÛØ¡ÙاÛÛ Ù
Ù
ک٠است ÙÛÚÚ¯ÛâÙØ§ Ù Ù
ØªØ¯ÙØ§Û دÛÚ¯Ø±Û ÙÙ
Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯ اÙ
ا Ù
ØªØ¯ÙØ§Û آراÛ٠را ÙØ¯Ø§Ø±Ùد.
اگر ٠ا Ø¨Ù Ø®ØµÙØµÛات زبا٠ÙگاÙÛ Ø¨ÛØ§ÙدازÛÙ â Ø®ÙاÙÛÙ Ø¯ÛØ¯ Ú©Ù Ø¨ÛØ´ØªØ± Ù ØªØ¯ÙØ§Û درÙÙâØ³Ø§Ø®ØªØ ÙØ±Ø¶ Ù ÛâÚ©ÙÙØ¯ Ú©Ù Ø¨Ù Ø¬Ø§Û Ø¢Ø±Ø§ÛÙâÙØ§Û Â«ÙØ§ÙعÛ» با ØÙÙÙâÙ¾Ø°ÛØ±Ùا ÛØ§ شب٠آراÛÙâÙØ§ کار Ù ÛâÚ©ÙÙØ¯ ÚÙ٠اÛÙÚ¯ÙÙÙ Ú©ÙØªØ§ÙâØªØ± است.
Array.from(obj[, mapFn, thisArg]) ÛÚ© آراÛÙ ÙØ§ÙØ¹Û Ø§Ø² ÛÚ© ØÙÙÙâÙ¾Ø°ÛØ± ÛØ§ شب٠آراÛÙâÛ obj Ù
ÛâØ³Ø§Ø²Ø¯ ٠سپس Ù
ÛâØªÙØ§ÙÛÙ
بر رÙÛ Ø¢Ù Ø§Ø² Ù
ØªØ¯ÙØ§Û آراÛÙâØ§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. آرگÙÙ
Ø§Ù Ø§Ø®ØªÛØ§Ø±Û mapFn Ù thisArg ب٠Ù
ا اجاز٠اعÙ
ا٠ÛÚ© تابع بر رÙÛ ÙØ± ÛÚ© از اÙÙ
اÙâÙØ§ را Ù
ÛâØ¯ÙÙØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)