Π’ массив Π² Ρ†ΠΈΠΊΠ»Π΅: Π¦ΠΈΠΊΠ» for | JS: ΠœΠ°ΡΡΠΈΠ²Ρ‹

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

массивы ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ / Π₯Π°Π±Ρ€

БСгодня, Π² пятой части ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° курса ΠΏΠΎ JavaScript, ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ массивах ΠΈ Ρ†ΠΈΠΊΠ»Π°Ρ…. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ мноТСства Π·Π°Π΄Π°Ρ‡. Часто с массивами Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ»Ρ‹.

β†’ Π§Π°ΡΡ‚ΡŒ 1: пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, особСнности языка, стандарты

β†’ Π§Π°ΡΡ‚ΡŒ 2: ΡΡ‚ΠΈΠ»ΡŒ ΠΊΠΎΠ΄Π° ΠΈ структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

β†’ Π§Π°ΡΡ‚ΡŒ 3: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, выраТСния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

β†’ Π§Π°ΡΡ‚ΡŒ 4: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

β†’ Π§Π°ΡΡ‚ΡŒ 5: массивы ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹

β†’ Π§Π°ΡΡ‚ΡŒ 6: ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎΡ‡ΠΊΠ° с запятой, ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

β†’ Π§Π°ΡΡ‚ΡŒ 7: строгий Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this, события, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, матСматичСскиС вычислСния

β†’ Π§Π°ΡΡ‚ΡŒ 8: ΠΎΠ±Π·ΠΎΡ€ возмоТностСй стандарта ES6

β†’ Π§Π°ΡΡ‚ΡŒ 9: ΠΎΠ±Π·ΠΎΡ€ возмоТностСй стандартов ES7, ES8 ΠΈ ES9

ΠœΠ°ΡΡΠΈΠ²Ρ‹


ΠœΠ°ΡΡΠΈΠ²Ρ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Array, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ вмСстС с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ языка. Они ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой списки ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива ΠΈΠΌΠ΅Π΅Ρ‚ индСкс (ΠΊΠ»ΡŽΡ‡) 0, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим соврСмСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами.

β–Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массивов


Π’ΠΎΡ‚ нСсколько способов ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массивов.

const a = []
const a = [1, 2, 3]
const a = Array.of(1, 2, 3)
const a = Array(6).fill(1) //инициализация ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива, состоящСго ΠΈΠ· 6 элСмСнтов, числом 1


Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТится индСкс элСмСнта массива. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массивов ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ.

const a = [1, 2, 3]
console.log(a) //[ 1, 2, 3 ]
const first = a[0]
console.log(first) //1
a[0] = 4
console.log(a) //[ 4, 2, 3 ]


ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Array для объявлСния массивов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ рСкомСндуСтся.

const a = new Array() //Π½Π΅ рСкомСндуСтся
const a = new Array(1, 2, 3) //Π½Π΅ рСкомСндуСтся


Π­Ρ‚ΠΎΡ‚ способ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лишь ΠΏΡ€ΠΈ объявлСнии Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… массивов.

β–ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ массива


Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ массива, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ свойству length.

const l = a.length

β–ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° массива с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° every()


ΠœΠ΅Ρ‚ΠΎΠ΄ массивов every() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ всСх ΠΈΡ… элСмСнтов с использованиСм Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ условия. Если всС элСмСнты массива ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ true, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ false.

Π­Ρ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ пСрСдаётся функция, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ currentValue (Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт массива), index (индСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта массива) ΠΈ array (сам массив). Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² качСствС this ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

НапримСр, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ Π»ΠΈ значСния всСх элСмСнтов массива число 10.

const a = [11, 12, 13]
const b = [5, 6, 25]
const test = el => el > 10
console.log(a.every(test)) //true
console.log(b.every(test)) //false


Π—Π΄Π΅ΡΡŒ нас, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ test(), интСрСсуСт лишь ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π΅ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, поэтому ΠΌΡ‹ объявляСм Π΅Ρ‘, указывая лишь ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ el, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

β–ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° массива с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° some()


Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ every(), Π½ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· элСмСнтов массива удовлСтворяСт ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

▍БозданиС массива Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ массива с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° map()


ΠœΠ΅Ρ‚ΠΎΠ΄ массивов map() позволяСт ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массивы, примСняя ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΡ… элСмСнту, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΡƒΡŽ элСмСнт, ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½ΠΎΠ²Ρ‹Π΅ массивы. Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ умноТСния всСх элСмСнтов исходного массива Π½Π° 2.

const a = [1, 2, 3]
const double = el => el * 2
const doubleA = a.map(double)
console.log(a) //[ 1, 2, 3 ]
console.log(doubleA) //[ 2, 4, 6 ]

β–Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° filter()


ΠœΠ΅Ρ‚ΠΎΠ΄ filter() ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ map(), Π½ΠΎ ΠΎΠ½ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ массивы, содСрТащиС лишь Ρ‚Π΅ элСмСнты исходных массивов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ filter() Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

β–ΠœΠ΅Ρ‚ΠΎΠ΄ reduce()


ΠœΠ΅Ρ‚ΠΎΠ΄ reduce() позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ аккумулятору ΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ массива, свСдя массив ΠΊ СдинствСнному Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΡƒΡŽ прСобразования, ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ аккумулятора. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

const a = [1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => {
 Β return accumulator * currentValue
}, 1)
console.log(a) //24
//итСрация 1: 1 * 1 = 1
//итСрация 2: 1 * 2 = 2
//итСрация 3: 2 * 3 = 6
//итСрация 4: 6 * 4 = 24


Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ всСх элСмСнтов массива, описанного с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°, задавая Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния аккумулятора 1.

β–ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° forEach()


ΠœΠ΅Ρ‚ΠΎΠ΄ массивов forEach() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массивов ΠΈ для выполнСния Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π½Π΅ΠΊΠΈΡ… дСйствий, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. НапримСр, Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, элСмСнты массива Π² консоль.

const a = [1, 2, 3]
a.forEach(el => console.log(el))
//1
//2
//3


Если ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ массива Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании forEach() придётся Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΠ΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°, Π»ΡƒΡ‡ΡˆΠ΅ всСго Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов массива.

β–ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ массива с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for…of


ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for...of появился Π² стандартС ES6. Он позволяСт ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π² Ρ‚ΠΎΠΌ числС β€” массивы). Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

const a = [1, 2, 3]
for (let v of a) {
 Β console.log(v)
}
//1
//2
//3


На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ v ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт массива a.

β–ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ массива с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for


ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² частности, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° (ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ) массивов, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΈΡ… элСмСнтам ΠΏΠΎ индСксам. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ индСкс ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ счётчиком Ρ†ΠΈΠΊΠ»Π°.

const a = [1, 2, 3]
for (let i = 0; i < a. length; i += 1) {
 Β console.log(a[i])
}
//1
//2
//3


Если, Π² Ρ…ΠΎΠ΄Π΅ выполнСния Ρ†ΠΈΠΊΠ»Π°, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ continue. Для досрочного Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ break. Если Π² Ρ†ΠΈΠΊΠ»Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, располоТСнном Π² Π½Π΅ΠΊΠΎΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ return, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½Π½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ return Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ Ρ‚ΡƒΠ΄Π°, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° функция.

β–ΠœΠ΅Ρ‚ΠΎΠ΄ @@iterator


Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ появился Π² стандартС ES6. Он позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β» β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ элСмСнтов массива. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ массива ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, воспользовавшись символом (Ρ‚Π°ΠΊΠΈΠ΅ символы Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «извСстными символами») Symbol.iterator. ПослС получСния ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ next(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ структуру Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт массива.

const a = [1, 2, 3]
let it = a[Symbol.iterator]()
console.log(it.next().value) //1
console.log(it.next().value) //2
console.log(it.next().value) //3


Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ next() послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ достигнут послСдний элСмСнт массива, ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚, Π² качСствС значСния элСмСнта, undefined. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ next(), содСрТит свойства value ΠΈ done. Бвойство done ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут послСдний элСмСнт массива. Π’ нашСм случаС, Ссли Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ it.next() Π² Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ Ρ€Π°Π·, ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ { value: undefined, done: true }, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ‚Ρ€Ρ‘Ρ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π» Π²ΠΈΠ΄ { value: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, done: false }.

ΠœΠ΅Ρ‚ΠΎΠ΄ массивов entries() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива.

const a = [1, 2, 3]
let it = a. entries()
console.log(it.next().value) //[0, 1]
console.log(it.next().value) //[1, 2]
console.log(it.next().value) //[2, 3]


ΠœΠ΅Ρ‚ΠΎΠ΄ keys() позволяСт ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ массива.

const a = [1, 2, 3]
let it = a.keys()
console.log(it.next().value) //0
console.log(it.next().value) //1
console.log(it.next().value) //2

▍ДобавлСниС элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† массива


Для добавлСния элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ push().

a.push(4)

▍ДобавлСниС элСмСнтов Π² Π½Π°Ρ‡Π°Π»ΠΎ массива


Для добавлСния элСмСнтов Π² Π½Π°Ρ‡Π°Π»ΠΎ массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ unshift().

a.unshift(0)
a.unshift(-2, -1)

▍УдалСниС элСмСнтов массива


Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· ΠΊΠΎΠ½Ρ†Π° массива, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠ² этот элСмСнт, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° pop().

a.pop()


Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° shift(), ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° массива.

a.shift()


Π’ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ ΡƒΠΆΠ΅ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ удалСния элСмСнтов ΠΈ ΠΈΡ… количСства, дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° splice().

a.splice(0, 2) // удаляСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 2 элСмСнта ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° массива
a.splice(3, 2) // удаляСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 2 элСмСнта, начиная с индСкса 3

▍УдалСниС элСмСнтов массива ΠΈ вставка вмСсто Π½ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов


Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹, воспользовавшись ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΈΠ΅ элСмСнты массива ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вмСсто Π½ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Π²Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ splice().

НапримСр, здСсь ΠΌΡ‹ удаляСм 3 элСмСнта массива начиная с индСкса 2, послС Ρ‡Π΅Π³ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ мСсто добавляСм Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнта:

const a = [1, 2, 3, 4, 5, 6]
a.splice(2, 3, 'a', 'b')
console.log(a) //[ 1, 2, 'a', 'b', 6 ]

β–ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… массивов


Для объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… массивов ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ concat(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ массив.

const a = [1, 2]
const b = [3, 4]
const c = a.concat(b)
console.log(c) //[ 1, 2, 3, 4 ]

β–ΠŸΠΎΠΈΡΠΊ элСмСнтов Π² массивС


Π’ стандартС ES5 появился ΠΌΠ΅Ρ‚ΠΎΠ΄ indexOf(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния искомого элСмСнта массива. Если элСмСнт Π² массивС Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ удаётся β€” возвращаСтся -1.

const a = [1, 2, 3, 4, 5, 6, 7, 5, 8]
console.log(a.indexOf(5)) //4
console.log(a.indexOf(23)) //-1


ΠœΠ΅Ρ‚ΠΎΠ΄ lastIndexOf() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс послСднСго вхоТдСния элСмСнта Π² массив, ΠΈΠ»ΠΈ, Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, -1.

const a = [1, 2, 3, 4, 5, 6, 7, 5, 8]
console.log(a.lastIndexOf(5)) //7
console.log(a.lastIndexOf(23)) //-1


Π’ ES6 появился ΠΌΠ΅Ρ‚ΠΎΠ΄ массивов find(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт поиск ΠΏΠΎ массиву с использованиСм ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта. Если элСмСнт Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ удаётся, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ undefined.

Π’Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π΅Π³ΠΎ использованиС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

a.find(x => x.id === my_id)


Π—Π΄Π΅ΡΡŒ Π² массивС, содСрТащСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, осущСствляСтся поиск элСмСнта, свойство id ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ равняСтся Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ.

ΠœΠ΅Ρ‚ΠΎΠ΄ findIndex() ΠΏΠΎΡ…ΠΎΠΆ Π½Π° find(), Π½ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта ΠΈΠ»ΠΈ undefined.

Π’ ES7 появился ΠΌΠ΅Ρ‚ΠΎΠ΄ includes(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ элСмСнта Π² массивС. Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true ΠΈΠ»ΠΈ false, найдя ΠΈΠ»ΠΈ Π½Π΅ найдя ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΉ программиста элСмСнт.

a.includes(value)


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ элСмСнта Π½Π΅ вСсь массив, Π° лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° индСкса. ИндСкс задаётся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

a.includes(value, i)

β–ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° массива


Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ копию Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° массива Π² Π²ΠΈΠ΄Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ массива, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ slice(). Если этот ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ массив окаТСтся ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ исходного. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π°Π΄Π°Ρ‘Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ. Если ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс Π½Π΅ Π·Π°Π΄Π°Π½, Ρ‚ΠΎ массив копируСтся ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ индСкса Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°.

const a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a.slice(4)) //[ 5, 6, 7, 8, 9 ]
console.log(a.slice(3,7)) //[ 4, 5, 6, 7 ]

▍Бортировка массива


Для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ сортировки элСмСнтов массива Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС (0-9A-Za-z) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ sort() Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅ΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

const a = [1, 2, 3, 10, 11]
a.sort()
console.log(a) //[ 1, 10, 11, 2, 3 ]
const b = [1, 'a', 'Z', 3, 2, 11]
b. sort()
console.log(b) //[ 1, 11, 2, 3, 'Z', 'a' ]


Π­Ρ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π·Π°Π΄Π°ΡŽΡ‰ΡƒΡŽ порядок сортировки. Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚, для сравнСния Π΄Π²ΡƒΡ… элСмСнтов, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ a ΠΈ b. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число Π² Ρ‚ΠΎΠΌ случаС, Ссли a мСньшС b ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ, 0 β€” Ссли ΠΎΠ½ΠΈ Ρ€Π°Π²Π½Ρ‹, ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число β€” Ссли a большС b. ΠŸΡ€ΠΈ написании ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для сортировки числовых массивов ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычитания a ΠΈ b. Π’Π°ΠΊ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° вычислСния выраТСния a - b ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ сортировку массива ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° вычислСния выраТСния b - a даст сортировку массива ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ.

const a = [1, 10, 3, 2, 11]
console.log(a.sort((a, b) => a - b)) //[ 1, 2, 3, 10, 11 ]
console.log(a.sort((a, b) => b - a)) //[ 11, 10, 3, 2, 1 ]


Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ порядок слСдования элСмСнтов массива ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ reverse(). Он, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ sort(), ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ массив для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вызываСтся.

β–ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ строкового прСдставлСния массива


Для получСния строкового прСдставлСния массива ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ toString().

a.toString()


ΠŸΠΎΡ…ΠΎΠΆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π°Ρ‘Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ join(), Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

a.join()


Π•ΠΌΡƒ, Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ элСмСнтов.

const a = [1, 10, 3, 2, 11]
console.log(a.toString()) //1,10,3,2,11
console.log(a.join()) //1,10,3,2,11
console.log(a.join(', ')) //1, 10, 3, 2, 11

▍БозданиС ΠΊΠΎΠΏΠΈΠΉ массивов


Для создания ΠΊΠΎΠΏΠΈΠΈ массива ΠΏΡƒΡ‚Ρ‘ΠΌ копирования Π² Π½ΠΎΠ²Ρ‹ΠΉ массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ исходного массива ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Array.from(). Он ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ для создания массивов ΠΈΠ· массивоподобных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΈΠ· строк, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€).

const a = 'a string'
const b = Array.from(a)
console.log(b) //[ 'a', ' ', 's', 't', 'r', 'i', 'n', 'g' ]


ΠœΠ΅Ρ‚ΠΎΠ΄ Array.of() Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для копирования массивов, Π° Ρ‚Π°ΠΊΠΆΠ΅ для «сборки» массивов ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСмСнтов. НапримСр, для копирования элСмСнтов ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ конструкциСй.

const a = [1, 10, 3, 2, 11]
const b = Array.of(...a)
console.log(b) // [ 1, 10, 3, 2, 11 ]


Для копирования элСмСнтов массива Π² Π½Π΅ΠΊΠΎΠ΅ мСсто самого этого массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ copyWithin(). Π•Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π·Π°Π΄Π°Ρ‘Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ источника элСмСнтов, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ источника элСмСнтов. Если Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ мСсто массива Π±ΡƒΠ΄Π΅Ρ‚ скопировано всё, начиная ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ индСкса ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ источника Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° массива.

const a = [1, 2, 3, 4, 5]
a. copyWithin(0, 2)
console.log(a) //[ 3, 4, 5, 4, 5 ]

Π¦ΠΈΠΊΠ»Ρ‹


Π’Ρ‹ΡˆΠ΅, говоря ΠΎ массивах, ΠΌΡ‹ ΡƒΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ способами ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ². Однако Ρ†ΠΈΠΊΠ»Ρ‹ Π² JavaScript ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами, Π΄Π° ΠΈ рассмотрСли ΠΌΡ‹ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС ΠΈΡ… Π²ΠΈΠ΄Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сСйчас ΠΌΡ‹ ΡƒΠ΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ Ρ€Π°Π·Π½Ρ‹Ρ… способов ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² JavaScript ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΈΡ… особСнностях.

▍Цикл for


Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния этого Ρ†ΠΈΠΊΠ»Π°.

const list = ['a', 'b', 'c']
for (let i = 0; i < list.length; i++) {
 Β console.log(list[i]) //значСния, хранящиСся Π² элСмСнтах Ρ†ΠΈΠΊΠ»ΠΎΠ²
 Β console.log(i) //индСксы
}


Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ break, Π° ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ сразу ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ continue.

▍Цикл forEach


Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ обсуТдали. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массива с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ.

const list = ['a', 'b', 'c']
list.forEach((item, index) => {
 Β console.log(item) //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  console.log(index) //индСкс
})
//Ссли индСксы элСмСнтов нас Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΈ Π±Π΅Π· Π½ΠΈΡ…
list.forEach(item => console.log(item))


Напомним, Ρ‡Ρ‚ΠΎ для прСрывания Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½Π°Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ссли ΠΏΡ€ΠΈ использовании Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†ΠΈΠΊΠ».

▍Цикл do…while


Π­Ρ‚ΠΎ β€” Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«Ρ†ΠΈΠΊΠ» с постусловиСм». Π’Π°ΠΊΠΎΠΉ Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условия Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π°.

const list = ['a', 'b', 'c']
let i = 0
do {
 Β console.log(list[i]) //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  console.log(i) //индСкс
 Β i = i + 1
} while (i < list.length)


Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ с использованиСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ break, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ continue.

▍Цикл while


Π­Ρ‚ΠΎ β€” Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«Ρ†ΠΈΠΊΠ» с прСдусловиСм». Если, Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π² Ρ†ΠΈΠΊΠ», условиС продолТСния Ρ†ΠΈΠΊΠ»Π° Π»ΠΎΠΆΠ½ΠΎ, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°.

const list = ['a', 'b', 'c']
let i = 0
while (i < list.length) {
 Β console.log(list[i]) //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  console.log(i) //индСкс
 Β i = i + 1
}

▍Цикл for…in


Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» позволяСт ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС пСрСчислимыС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌ.

let object = {a: 1, b: 2, c: 'three'}
for (let property in object) {
 Β console.log(property) //имя свойства
 Β console.log(object[property]) //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства
}

▍Цикл for…of


Π¦ΠΈΠΊΠ» for...of совмСщаСт Π² сСбС удобство Ρ†ΠΈΠΊΠ»Π° forEach ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌΠΈ срСдствами.

//ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
for (const value of ['a', 'b', 'c']) {
 Β console.log(value) //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
}
//ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ индСксов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `entries()`
for (const [index, value] of ['a', 'b', 'c']. entries()) {
  console.log(index) //индСкс
 Β console.log(value) //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
}


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ здСсь, Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const, Π° Π½Π΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, let. Если Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° Ρ†ΠΈΠΊΠ»Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‚ΠΎ const Π½Π°ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ for...in ΠΈ for...of, Ρ‚ΠΎ окаТСтся, Ρ‡Ρ‚ΠΎ for...in ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° свойств, Π° for...of β€” значСния свойств.

Π¦ΠΈΠΊΠ»Ρ‹ ΠΈ области видимости


Π‘ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ ΠΈ с областями видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… связана ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ JavaScript, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ с этими ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ†ΠΈΠΊΠ»Π°Ρ…, ΠΎΠ± областях видимости, ΠΈ ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… словах var ΠΈ let.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

const operations = []
for (var i = 0; i < 5; i++) {
 Β operations. push(() => {
 Β Β Β console.log(i)
 Β })
}
for (const operation of operations) {
 Β operation()
}


Π’ Ρ†ΠΈΠΊΠ»Π΅ производится 5 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² массив operations добавляСтся новая функция. Π­Ρ‚Π° функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² консоль Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счётчика Ρ†ΠΈΠΊΠ»Π° β€” i. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² массив, ΠΌΡ‹ этот массив ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π΅Π³ΠΎ элСмСнтами.

Выполняя ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅.

0
1
2
3
4


Но Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

5
5
5
5
5


ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ? Всё Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² качСствС счётчика Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var.

Π’Π°ΠΊ ΠΊΠ°ΠΊ объявлСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ области видимости, Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ.

var i;
const operations = []
for (i = 0; i < 5; i++) {
 Β operations. push(() => {
 Β Β Β console.log(i)
 Β })
}
for (const operation of operations) {
 Β operation()
}


Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ оказываСтся, Ρ‡Ρ‚ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅ for...of, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ массив, пСрСмСнная i всё Π΅Ρ‰Ρ‘ Π²ΠΈΠ΄Π½Π°, ΠΎΠ½Π° Ρ€Π°Π²Π½Π° 5, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° i Π²ΠΎ всСх функциях, ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ число 5.

Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π΄Π΅Π»Π°Π»Π° Π±Ρ‹ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ Π½Π΅Ρ‘ оТидаСтся?

Π‘Π°ΠΌΠΎΠ΅ простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова let. Оно, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, появилось Π² ES6, Π΅Π³ΠΎ использованиС позволяСт ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… странностСй, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Ρ… для var.

Π’ частности, Π² Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ достаточно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ var Π½Π° let ΠΈ всё Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ.

const operations = []
for (let i = 0; i < 5; i++) {
 Β operations.push(() => {
 Β Β Β console.log(i)
 Β })
}
for (const operation of operations) {
 Β operation()
}


Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° каТдая функция, добавлСнная Π² массив operations, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию i. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i Π² Ρ†ΠΈΠΊΠ»Π΅ мСняСтся.

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто примСнялся Π΄ΠΎ появлСния стандарта ES6, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова let Π΅Ρ‰Ρ‘ Π½Π΅ Π±Ρ‹Π»ΠΎ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании IIFE.

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i сохраняСтся Π² Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΈ, Π° Π² массив ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ функция, возвращаСмая IIFE ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ доступ ΠΊ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΡŽ. Π­Ρ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² Π½Π΅ΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит.

const operations = []
for (var i = 0; i < 5; i++) {
 Β operations.push(((j) => {
 Β Β Β return () => console.log(j)
 Β })(i))
}
for (const operation of operations) {
 Β operation()
}

Π˜Ρ‚ΠΎΠ³ΠΈ


БСгодня ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ массивах ΠΈ ΠΎ Ρ†ΠΈΠΊΠ»Π°Ρ… Π² JavaScript. Π’Π΅ΠΌΠ° нашСго ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° β€” ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, особСнности использования Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Какими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами Π² JavaScript Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Ρ‡Π°Ρ‰Π΅ всСго?

10.19 – Π¦ΠΈΠΊΠ»Ρ‹ for-each (Ρ†ΠΈΠΊΠ»Ρ‹ Π½Π° основС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°)

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ 9 июня 2021 Π² 17:17

Π’ ΡƒΡ€ΠΎΠΊΠ΅ Β«10.3 – ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹Β» ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ использовали Ρ†ΠΈΠΊΠ» for для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх элСмСнтов массива.

НапримСр:

#include <iostream>
#include <iterator> // std::size
 
int main()
{
    constexpr int scores[]{ 84, 92, 76, 81, 56 };
    constexpr int numStudents{ std::size(scores) };
 
    int maxScore{ 0 }; // отслСТиваСм наш самый большой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
    for (int student{ 0 }; student < numStudents; ++student)
    {
        if (scores[student] > maxScore)
        {
            maxScore = scores[student];
        }
    }
 
    std::cout << "The best score was " << maxScore << '\n';
 
    return 0;
}

Π₯отя Ρ†ΠΈΠΊΠ»Ρ‹ for ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ способ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° массива, ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ, ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ошибкам Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

БущСствуСт Π±ΠΎΠ»Π΅Π΅ простой ΠΈ бСзопасный Ρ‚ΠΈΠΏ Ρ†ΠΈΠΊΠ»Π°, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ†ΠΈΠΊΠ»ΠΎΠΌ for-each (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ†ΠΈΠΊΠ»ΠΎΠΌ for Π½Π° основС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°) для случаСв, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнты Π² массивС (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ структурС Ρ‚ΠΈΠΏΠ° списка).

Π¦ΠΈΠΊΠ»Ρ‹ for-each

Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for-each выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

for (объявлСниС_элСмСнта : массив)
   инструкция;

Когда встрСчаСтся этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС элСмСнты Π² массивС, присваивая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта массива ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, объявлСнной Π² объявлСниС_элСмСнта. Для достиТСния Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² объявлСниС_элСмСнта Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ элСмСнты массива, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ†ΠΈΠΊΠ» for-each ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ всСх элСмСнтов массива с ΠΈΠΌΠ΅Π½Π΅ΠΌ fibonacci:

#include <iostream>
 
int main()
{
    constexpr int fibonacci[]{ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
    for (int number : fibonacci) // ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ массив fibonacci
    {
       // ΠΌΡ‹ обращаСмся ΠΊ элСмСнту массива Π² этой ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ number
       std::cout << number << ' '; 
    }
 
    std::cout << '\n';
 
    return 0;
}

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

0 1 1 2 3 5 8 13 21 34 55 89

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π‘Π½Π°Ρ‡Π°Π»Π° выполняСтся Ρ†ΠΈΠΊΠ» for, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ number присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, которая ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ 0. Π—Π°Ρ‚Π΅ΠΌ Ρ†ΠΈΠΊΠ» for выполняСтся снова, ΠΈ number устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ выполняСтся снова, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 1. Π¦ΠΈΠΊΠ» for ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· чисСл ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, выполняя ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…, ΠΏΠΎΠΊΠ° Π² массивС Π½Π΅ останСтся элСмСнтов для повторСния. На этом этапС Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (возвращая 0 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ пСрСмСнная number Π½Π΅ являСтся индСксом массива. Π•ΠΉ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.

Π¦ΠΈΠΊΠ»Ρ‹ for-each ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово

auto

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ объявлСниС_элСмСнта Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ элСмСнты массива, это ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ случай, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово auto ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ C++ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ для нас Ρ‚ΠΈΠΏ элСмСнтов массива.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅, Π½ΠΎ с использованиСм auto:

#include <iostream>
 
int main()
{
    constexpr int fibonacci[]{ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };

    // Ρ‚ΠΈΠΏ auto, поэтому Ρ‚ΠΈΠΏ number выводится ΠΈΠ· массива fibonacci
    for (auto number : fibonacci) 
    {
       std::cout << number << ' ';
    }
 
    std::cout << '\n';
 
    return 0;
}

Π¦ΠΈΠΊΠ»Ρ‹ for-each ΠΈ ссылки

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ for-each наши объявлСния элСмСнтов ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ:

std::string array[]{ "peter", "likes", "frozen", "yogurt" };
for (auto element : array) // element Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта массива
{
    std::cout << element << ' ';
}

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ элСмСнт массива Π±ΡƒΠ΄Π΅Ρ‚ скопирован Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ element. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ элСмСнтов массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ дорогостоящим, ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΡ‹ просто Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° исходный элСмСнт. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для этого ссылки:

std::string array[]{ "peter", "likes", "frozen", "yogurt" };

// АмпСрсанд Π΄Π΅Π»Π°Π΅Ρ‚ element ссылкой Π½Π° фактичСский
// элСмСнт массива, прСдотвращая созданиС ΠΊΠΎΠΏΠΈΠΈ
for (auto& element: array) 
{
    std::cout << element << ' ';
}

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ element Π±ΡƒΠ΄Π΅Ρ‚ ссылкой Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ элСмСнт массива, избСгая нСобходимости Π΄Π΅Π»Π°Ρ‚ΡŒ копию. Π’Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹Π΅ измСнСния Π² element ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° массив, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ выполняСтся итСрация, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли Π±Ρ‹ element Π±Ρ‹Π» ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ссылку константной, Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния:

std::string array[]{ "peter", "likes", "frozen", "yogurt" };

// element являСтся константной ссылкой Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ элСмСнт массива
for (const auto& element: array)
{
    std::cout << element << ' ';
}

Π›ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°


Π’ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… элСмСнтов Ρ†ΠΈΠΊΠ»ΠΎΠ² for-each, Ссли ваши элСмСнты Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ссылки ΠΈΠ»ΠΈ константныС ссылки для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ поиска максимальной ΠΎΡ†Π΅Π½ΠΊΠΈ с использованиСм Ρ†ΠΈΠΊΠ»Π° for-each

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° ΡƒΡ€ΠΎΠΊΠ°, пСрСписанный с использованиСм Ρ†ΠΈΠΊΠ»Π° for-each:

#include <iostream>
 
int main()
{
    constexpr int scores[]{ 84, 92, 76, 81, 56 };
    int maxScore{ 0 }; // отслСТиваСм наш самый большой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
 
    // ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ массив scores, присваивая ΠΊΠ°ΠΆΠ΄ΠΎΠ΅
    // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ score 
    for (auto score : scores) 
    {
        if (score > maxScore)
        {
            maxScore = score;
        }
    }
 
    std::cout << "The best score was " << maxScore << '\n';
 
    return 0;
}

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнту массива Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ score. Π’ массивС Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ информация ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅. Массив, Ρ€Π°ΡΠΏΠ°Π²ΡˆΠΈΠΉΡΡ Π΄ΠΎ указатСля, нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ for-each.

Π¦ΠΈΠΊΠ»Ρ‹ for-each ΠΈ нСмассивы

Π¦ΠΈΠΊΠ»Ρ‹ for-each Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с фиксированными массивами, ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ структур, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… спискам, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, std::vector), связныС списки, Π΄Π΅Ρ€Π΅Π²ΡŒΡ ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹. ΠœΡ‹ Π΅Ρ‰Π΅ Π½Π΅ рассмотрСли Π½ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ…, поэтому Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» for-each прСдоставляСт Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ массивов.

#include <iostream>
#include <vector>
 
int main()
{
    // ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС здСсь std::vector,
    // Π° Π½Π΅ фиксированного массива
    std::vector fibonacci{ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 }; 
    // Π”ΠΎ C++17
    // std::vector<int> fibonacci{ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
 
    for (auto number : fibonacci)
    {
        std::cout << number << ' ';
    }
 
    std::cout << '\n';
 
    return 0;
}

for-each Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с указатСлями Π½Π° массив

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΏΠΎ массиву, Ρ†ΠΈΠΊΠ»Ρƒ for-each Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массивы, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π½Π΅ Π·Π½Π°ΡŽΡ‚ своСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ†ΠΈΠΊΠ»Ρ‹ for-each с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚!

#include <iostream>
 
int sumArray(const int array[]) // array - это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
{
    int sum{ 0 };
 
    for (auto number : array) // ошибка компиляции, Ρ€Π°Π·ΠΌΠ΅Ρ€ массива нСизвСстСн
    {
        sum += number;
    }
 
    return sum;   
}
 
int main()
{
     constexpr int array[]{ 9, 7, 5, 3, 1 };
 
     std::cout << sumArray(array) << '\n'; // здСсь массив раскладываСтся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
 
     return 0;
}

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ с Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ for-each Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ динамичСскиС массивы.

ΠœΠΎΠ³Ρƒ Π»ΠΈ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта?

Π¦ΠΈΠΊΠ»Ρ‹ for-each Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ прямого способа ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта массива. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ структуры, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ†ΠΈΠΊΠ»Ρ‹ for-each (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, связныС списки), Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ!

Начиная с C++20, Ρ†ΠΈΠΊΠ»Ρ‹ for Π½Π° основС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ инструкциСй Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ инструкция Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… for. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для создания счСтчика индСкса Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π½Π΅ загрязняя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Ρ†ΠΈΠΊΠ» for.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ инструкция помСщаСтся прямо ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°:

for (ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ_инструкция; объявлСниС_элСмСнта : массив)
   инструкция;

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎ индСксу. НапримСр, студСнт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² names[3] Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Π±Π°Π»Π», Ρ€Π°Π²Π½Ρ‹ΠΉ scores[3]. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° обнаруТиваСтся студСнт с Π½ΠΎΠ²Ρ‹ΠΌ Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠΌ, ΠΌΡ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ Π΅Π³ΠΎ имя ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² Π±Π°Π»Π»Π°Ρ… с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠΌ.

#include <iostream>
 
int main()
{
    std::string names[]{ "Alex", "Betty", "Caroline", "Dave", "Emily" }; // ИмСна студСнтов
    constexpr int scores[]{ 84, 92, 76, 81, 56 };
    int maxScore{ 0 };
 
    for (int i{ 0 }; auto score : scores) // i - индСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта
    {
        if (score > maxScore)
        {
            std::cout << names[i] << " beat the previous best score of " << maxScore 
                      << " by " << (score - maxScore) << " points!\n";
            maxScore = score;
        }
        
        ++i;
    }
 
    std::cout << "The best score was " << maxScore << '\n';
 
    return 0;
}

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Alex beat the previous best score of 0 by 84 points!
Betty beat the previous best score of 84 by 8 points!
The best score was 92

int i {0}; – это ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ инструкция, ΠΎΠ½Π° выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΡ€ΠΈ запускС Ρ†ΠΈΠΊΠ»Π°. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ i, ΠΊΠ°ΠΊ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ for. Однако Ссли Π±Ρ‹ ΠΌΡ‹ использовали continue Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, Π±Ρ‹Π»Π° Π±Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ++i, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ continue, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ i инкрСмСнтируСтся Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ встрСтится continue.

Π”ΠΎ C++20 ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π²Π½Π΅ Ρ†ΠΈΠΊΠ»Π°, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ привСсти ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ ΠΈΠΌΠ΅Π½, Ссли Π±Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ i.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π¦ΠΈΠΊΠ»Ρ‹ for-each ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ прСвосходный синтаксис для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ всСм элСмСнтам массива Π² прямом ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ порядкС. Если Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ стандартного Ρ†ΠΈΠΊΠ»Π° for. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ созданиС ΠΊΠΎΠΏΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта, Π² ΠΈΠ΄Π΅Π°Π»Π΅ объявлСниС элСмСнта Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ссылкой.

НСбольшой тСст

Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ.


Вопрос 1

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ фиксированный массив со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ: Alex, Betty, Caroline, Dave, Emily, Fred, Greg ΠΈ Holly. ΠŸΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти имя. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» for-each, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² массивС имя, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Enter a name: Betty
Betty was found.
Enter a name: Megatron
Megatron was not found.

Подсказка: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ std::string_view Π² качСствС Ρ‚ΠΈΠΏΠ° массива.

ΠžΡ‚Π²Π΅Ρ‚

#include <iostream>
#include <string>
#include <string_view>
 
int main()
{
    constexpr std::string_view names[]{ "Alex", "Betty", "Caroline",
                                        "Dave", "Emily", "Fred",
                                        "Greg", "Holly" };
	
    std::cout << "Enter a name: ";
    std::string username{};
    std::cin >> username;
 
    bool found{ false };
 
    for (const auto name : names)
    {
        if (name == username)
        {
            found = true;
            break;
        }
    }
 
    if (found)
        std::cout << username << " was found. \n";
    else
        std::cout << username << " was not found.\n";
 
    return 0;
}

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ:

  • 9.19 β€” For-each loops

Π’Π΅Π³ΠΈ

arrayC++ / CppforeachLearnCppДля Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…ΠœΠ°ΡΡΠΈΠ²ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Π¦ΠΈΠΊΠ»

Назад

ОглавлСниС

Π’ΠΏΠ΅Ρ€Π΅Π΄

java — ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ†ΠΈΠΊΠ» for присваиваСт 0 Π² массивС?

Π—Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопрос

спросил

ИзмСнСно
1 Π³ΠΎΠ΄, 1 мСсяц Π½Π°Π·Π°Π΄

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ
352 Ρ€Π°Π·Π°

НСобходимо ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ значСния ΠΎΡ‚ массива ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив. Π¦ΠΈΠΊΠ»Ρ‹ for ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ 0 ΠΊ массивам evenA ΠΈodA, Ссли мСсто Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. НС ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ½ΡΡ‚ΡŒ это.

 //ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈ Ρ‡Π΅Ρ‚Π½ΠΎΠ³ΠΎ массива
    for(int я = 0; я < Ρ€Π°Π·ΠΌΠ΅Ρ€; я ++) {
        Ссли ((arr[i] % 2) == 0) {
            Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ += 1;
        }
        Π΅Ρ‰Π΅ {
            ΡˆΠ°Π½ΡΡ‹ += 1;
        }
    }
    //Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹Π΅ массивы ΠΊΠ°ΠΊ для Ρ‡Π΅Ρ‚Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ для Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
    int[] evenA = Π½ΠΎΠ²Ρ‹ΠΉ int[evens];
    int[]odA = Π½ΠΎΠ²Ρ‹ΠΉ int[ΡˆΠ°Π½ΡΡ‹];
    
    // ДобавляСм Π² массивы Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа.
    for(int я = 0; я < Ρ€Π°Π·ΠΌΠ΅Ρ€; я ++) {
        Ссли ((arr[i] % 2) == 0) {
            Π΄Π°ΠΆΠ΅A[j] = ΠΎΠ±Ρ€[i];
        }
        Π΅Ρ‰Π΅ {
                Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉA[j] = ΠΎΠ±Ρ€[i];
        }
    }
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

 Массив [] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
    
    даТСА[] = {0, 2, 0, 4}
    Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉA[] = {1, 0, 3, 0, 5}
 

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ пСрСстаСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. МнС Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½ΡƒΠ»Π΅ΠΉ.

  • Java
  • массивы

3

Π’ массив Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½ΡƒΠ»ΠΈ. Массив Π±Ρ‹Π» Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ нулями, ΠΈ ΠΎΠ±Π° индСкса массива ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, значСния ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто индСкса. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, отслСТивайтС индСксы Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… массивов ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ:

 int Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉPtr = 0;
ΠΈΠ½Ρ‚ Π΄Π°ΠΆΠ΅Ptr = 0;
for(int я = 0; я < Ρ€Π°Π·ΠΌΠ΅Ρ€; я ++) {
    Ссли ((arr[i] % 2) == 0) {
        Π΄Π°ΠΆΠ΅A[evenPtr++] = arr[i];
    }
    Π΅Ρ‰Π΅ {
        Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉA[Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉPtr++] = arr[i];
    }
}
 

НаконСц, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… массивов Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ исходного массива.

ΠžΠ‘ΠΠžΠ’Π›Π•ΠΠ˜Π• :

Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎΠ΄ вопросом ОП. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я объясняю Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ нулях Π² массивах. Линия:

 int[] evenA = new int[evens];
 

создаСт массив Π΄Π»ΠΈΠ½ΠΎΠΉ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… (допустим, 4), Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² массивС инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… int ; Ρ‡Ρ‚ΠΎ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, evenA выглядСл Ρ‚Π°ΠΊ:

 evenA => {0,0,0,0};
 

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ счСтчик индСкса (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ) увСличивался Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ И ΠΎΠ½ Π±Ρ‹Π» ΠΎΠ±Ρ‰ΠΈΠΌ для Π΄Π²ΡƒΡ… массивов, вставка Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π»Π°ΡΡŒ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ:

 {0,2,0,4,0}
{1,0,3,0,5}
 

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, каТдая нСчСтная позиция индСкса содСрТала Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа, Π° Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ индСкса содСрТали Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ я прСдоставил, содСрТит Π΄Π²Π° указатСля индСкса, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ увСличиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ условия для опрСдСлСния Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Π½ΠΎΠ³ΠΎ.

5

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ счСтчик для ΠΎΠ±ΠΎΠΈΡ… массивов, ваш массив заполняСтся Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ j для назначСния ΠΎΠ±ΠΎΠΈΡ… массивов. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ массив

 int[] ΠΎΠ±Ρ€ = {1, 2, 3, 4};
 

А j = 0; ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ. Π’Π°Ρˆ Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

ΠŸΠ΅Ρ€Π²Π°Ρ итСрация:

oddA = {0, 0}; даТСА = {0, 0};

j = 0; я = 0;

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ:
j = 1; нСчСтныйА = {1, 0}; даТСА = {0, 0};

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ итСрация:

Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉA = {1, 0}; даТСА = {0, 0};

j = 1; я = 1;

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт массива Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ:

j = 1; нСчСтныйА = {1, 0};

Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉA[j] = 2 => Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉA = {0, 2};

ВмСсто этого слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… счСтчика для массивов Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

 int[] arr = {1, 2, 3, 4};
    Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа = 0, ΡˆΠ°Π½ΡΡ‹ = 0;
    для (Ρ†Π΅Π»ΠΎΠ΅ число: ΠΎΠ±Ρ€) {
        Ссли (число % 2 == 0) Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ++;
        ΠΈΠ½Π°Ρ‡Π΅ ΡˆΠ°Π½ΡΡ‹++;
    }
    int[] evenA = Π½ΠΎΠ²Ρ‹ΠΉ int[evens];
    int[]odA = Π½ΠΎΠ²Ρ‹ΠΉ int[ΡˆΠ°Π½ΡΡ‹];
    // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… счСтчиков массива
    ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π΄Π°ΠΆΠ΅ArrayCounter = 0;
    int Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉArrayCounter = 0;
    для (Ρ†Π΅Π»ΠΎΠ΅ число: ΠΎΠ±Ρ€) {
        Ссли (число % 2 == 0) evenA[evenArrayCounter++] = число;
        ΠΈΠ½Π°Ρ‡Π΅ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉA[oddArrayCounter++] = число;
    }
 

2

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈΠ»ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² систСму

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Facebook

Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½Π΅ отобраТаСтся

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΎΡΡ‚ΡŒ

ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π°

ВрСбуСтся, Π½ΠΎ Π½Π΅ отобраТаСтся

ИспользованиС массивов с Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ For

ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ массивов

Π― Π±Ρ‹ сказал, Ρ‡Ρ‚ΠΎ массивы β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… доступных инструмСнтов программирования.

Если Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ язык программирования, я Π±Ρ‹ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π²Π°ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² массивах. Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ научимся ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массив Π² языкС программирования Arduino.

ΠœΠ°ΡΡΠΈΠ²Ρ‹

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΊΠΎΠ΄Π°. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρƒ нас здСсь? Π§Ρ‚ΠΎ ΠΆ, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ я сдСлал, это создал ΠΎΠ±Ρ€Π°Π·Π΅Ρ† массива. Π­Ρ‚ΠΎΡ‚ массив содСрТит значСния с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. НазваниС называСтся Β«sensorReadingsΒ», Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого массива устанавливаСтся ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌ создании. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ значСния ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π² этом случаС ΠΌΡ‹ это сдСлали. Π˜Ρ‚Π°ΠΊ, Ρƒ мСня Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π». Для этого ΡƒΡ€ΠΎΠΊΠ° Π½Π°ΠΌ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСкс этих чисСл. Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ это Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса относится ΠΊ полоТСнию элСмСнта Π² массивС. Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ установили, Ρ‡Ρ‚ΠΎ значСния индСкса Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅, Π΄Π²ΡƒΠΌ ΠΈ Ρ‚Ρ€Π΅ΠΌ. Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ установка. Установка запускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Serial.begin. Π― поставил это Π½Π° 9,600. Π­Ρ‚ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, ΠΈ ΠΎΠ½Π° установит ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Arduino ΠΈ нашим ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ. НаконСц, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» void. Ѐункция Ρ†ΠΈΠΊΠ»Π° Π² Arduino выполняСтся снова ΠΈ снова. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° void Ρƒ нас Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ», Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ†ΠΈΠΊΠ»ΠΎΠΌ for. Π¦ΠΈΠΊΠ»Ρ‹ for β€” Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ распространСнная структура программирования. Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈΡ… Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках, ΠΈ сСгодня ΠΌΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ здСсь Ρ†ΠΈΠΊΠ» for для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° нашСго массива. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ этому Ρ†ΠΈΠΊΠ»Ρƒ for, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· этих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠΊΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, Ссли Π±Ρ‹ ΠΌΡ‹ Π½Π΅ использовали Ρ†ΠΈΠΊΠ» for.

Π—Π΄Π΅ΡΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ строки. Π­Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, ΠΈ я Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали, sensorReadings. Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ показания Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°, ΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ индСкс, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² массивС индСксируСтся Π½ΡƒΠ»Π΅ΠΌ ΠΈΠ»ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ индСксациСй. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ΄. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ это пСчатаСтся прямо здСсь, ΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ эти Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ значСния, ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ находимся Π² Ρ†ΠΈΠΊΠ»Π΅, это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ снова ΠΈ снова. Но ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ всСго этого ТСсткого кодирования, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‚ Ρ†ΠΈΠΊΠ»Π° for.

Наш Ρ†ΠΈΠΊΠ» for Π΄Π΅Π»Π°Π΅Ρ‚ практичСски Ρ‚ΠΎ ΠΆΠ΅ самоС. Он проиндСксируСт ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· этих чисСл, Π° Π·Π°Ρ‚Π΅ΠΌ распСчатаСт эти элСмСнты. Π¦ΠΈΠΊΠ» for ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ этих ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт называСтся Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ β€” условиС, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ β€” ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅. Π˜Ρ‚Π°ΠΊ, сначала ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° for. Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π²Π΅Ρ€Π½ΠΎ? И Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ, Ρ‚Π°ΠΊ это ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ i ΠΈ устанавливаСм Π΅Π΅ Ρ€Π°Π²Π½ΠΎΠΉ Π½ΡƒΠ»ΡŽ. ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, эй, это Ρ†Π΅Π»ΠΎΠ΅ число. Имя Ρ†Π΅Π»ΠΎΠ³ΠΎ числа β€” i, ΠΈ ΠΌΡ‹ устанавливаСм Π΅Π³ΠΎ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ. Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ пСрСмСнная. Он называСтся i ΠΈ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. Π˜Ρ‚Π°ΠΊ, это Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i. Π― просто ΠΎΡ‡Π΅Π½ΡŒ распространСнноС имя. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π²Π΅Ρ‰ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ for называСтся условиСм. УсловиС опрСдСляСт, сколько Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ†ΠΈΠΊΠ» for. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, нашС условиС здСсь Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, я, мСньшС Ρ‡Π΅ΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅. Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠΊΠ° это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ оцСниваСтся ΠΊΠ°ΠΊ истинноС, Ρ†ΠΈΠΊΠ» for Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ этот Ρ†ΠΈΠΊΠ» for, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ способ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ i, Π²Π΅Ρ€Π½ΠΎ? Ну, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π΅ΠΌ? Ну, это послСдняя Ρ‡Π°ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° for. Π­Ρ‚ΠΎ называСтся ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ, ΠΈ здСсь ΠΌΡ‹ добавляСм Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΊ i. Π­Ρ‚ΠΎΡ‚ i++, ΠΏΠΎ сути, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ я плюс ΠΎΠ΄ΠΈΠ½. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ я Ρ€Π°Π²Π΅Π½ я плюс ΠΎΠ΄ΠΈΠ½.