Π Π°Π·Π½ΠΎΠ΅

Π‘ΡƒΠΌΠΌΠ° элСмСнтов массива javascript: Как Π½Π°ΠΉΡ‚ΠΈ сумму массива чисСл

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

Array.prototype.reduce() — JavaScript | MDN

ΠœΠ΅Ρ‚ΠΎΠ΄ reduce() примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ reducer ΠΊΒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива (слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ), возвращая ΠΎΠ΄Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

The source for this interactive example is stored in a GitHub repository. If you’d like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ этого ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° хранится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitHub. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти свой Π²ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², скопируйтС https://github.com/mdn/interactive-examples ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π½Π°ΠΌ запрос Π½Π° пСрСнос.

array.reduce(callback[, initialValue])

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

callback
Ѐункция, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

accumulator
Аккумулятор, Π°ΠΊΠΊΡƒΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция callback послС посСщСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта, Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ initialValue, Ссли ΠΎΠ½ΠΎ прСдоставлСно (смотритС пояснСния Π½ΠΈΠΆΠ΅).
currentValue
Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ элСмСнт массива.
indexΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ
ИндСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ элСмСнта массива.
arrayΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ
Массив, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° функция reduce.
initialValueΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ
ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ callback.

ΠœΠ΅Ρ‚ΠΎΠ΄ reduce() выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ callback ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π² массивС, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ пустот, принимая Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° callback), Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ индСкс ΠΈ массив, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ происходит итСрация.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ accumulator ΠΈ currentValue ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ reduce() ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ initialValue, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ accumulator Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ initialValue, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currentValue Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² массивС. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ initialValue Π½Π΅ Π·Π°Π΄Π°Π½, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ accumulator Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² массивС, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currentValue Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² массивС.

Если массив пустой ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ initialValue Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Π±ΡƒΠ΄Π΅Ρ‚ Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ TypeError. Если массив состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта (нСзависимо ΠΎΡ‚ Π΅Π³ΠΎ полоТСния Π² массивС) ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ initialValue Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, ΠΈΠ»ΠΈ Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ initialValue ΡƒΠΊΠ°Π·Π°Π½, Π½ΠΎ массив пустой, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ ΠΎΠ΄Π½ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π±Π΅Π· Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ callback.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ reduce() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {
  return previousValue + currentValue;
});

Колбэк-функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π°, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ:

previousValuecurrentValueindexarrayΠ²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²011[0, 1, 2, 3, 4]1
Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²122[0, 1, 2, 3, 4]3
Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²333[0, 1, 2, 3, 4]6
Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²644[0, 1, 2, 3, 4]10

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ reduce() Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΌ послСднСму Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ выполнСния колбэк-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” 10.

Если ΠΆΠ΅ Π²Ρ‹ Π·Π°Π΄Π°Π΄ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ initialValue, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, index, array) {
  return accumulator + currentValue;
}, 10);
accumulatorcurrentValueindexarrayΠ²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²1000[0, 1, 2, 3, 4]10
Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²1011[0, 1, 2, 3, 4]11
Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ²1122[0, 1, 2, 3, 4]13
Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²1333[0, 1, 2, 3, 4]16
пятый Π²Ρ‹Π·ΠΎΠ²1644[0, 1, 2, 3, 4]20

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ reduce() Π½Π° этот Ρ€Π°Π·, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΌ 20.

Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивС

var total = [0, 1, 2, 3].reduce(function(a, b) {
  return a + b;
});

Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния, содСрТащиСся Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ initialValue, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт смог ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· callback.

var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulator, currentValue) {
    return accumulator + currentValue.x;
}, initialValue)

Π’ΠΎΠΆΠ΅ самоС, Π½ΠΎ со стрСлочной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:Β 

var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
    (accumulator, currentValue) => accumulator + currentValue.x,
    initialValue
);

Π Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ массива массивов

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
});

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: склСиваниС массивов, содСрТащихся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… массива, с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ initialValue



var friends = [
{ name: "Anna", books: ["Bible", "Harry Potter"], age: 21 },
{ name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26 },
{ name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18 }
]



var allbooks = friends.reduce(function(prev, curr) {
  return [...prev, ...curr.books];
}, ["Alphabet"]);



ΠœΠ΅Ρ‚ΠΎΠ΄ Array.prototype.reduce() Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊ стандарту ECMA-262 Π² 5-ΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ; поэтому ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… рСализациях стандарта. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² Π½Π°Ρ‡Π°Π»ΠΎ Π²Π°ΡˆΠΈΡ… скриптов, ΠΎΠ½ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ reduce() Π² рСализациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄.




if (!Array.prototype.reduce) {
  Array.prototype.reduce = function(callback) {
    'use strict';
    if (this == null) {
      throw new TypeError('Array.prototype.reduce called on null or undefined');
    }
    if (typeof callback !== 'function') {
      throw new TypeError(callback + ' is not a function');
    }
    var t = Object(this), len = t.length >>> 0, k = 0, value;
    if (arguments.length >= 2) {
      value = arguments[1];
    } else {
      while (k < len && ! (k in t)) {
        k++;
      }
      if (k >= len) {
        throw new TypeError('Reduce of empty array with no initial value');
      }
      value = t[k++];
    }
    for (; k < len; k++) {
      if (k in t) {
        value = callback(value, t[k], k, t);
      }
    }
    return value;
  };
}

BCD tables only load in the browser

Javascript Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ сумму элСмСнтов массива, порядковыС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ со

1) Π‘ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true,

Ссли ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ высказываниС являСтся истинным, ΠΈ false β€”

Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

Π—Π°Π΄Π°Ρ‡Π°:

Π‘ΡƒΠΌΠΌΠ° Ρ†ΠΈΡ„Ρ€ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ числа N прСвосхо­

Π΄ΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ†ΠΈΡ„Ρ€ этого ΠΆΠ΅ числа Π½Π° 1.

2) ВСкстровая Π·Π°Π΄Π°Ρ‡Π°

На плоскости .Π“ΠžΠ“Π·Π°Π΄Π°Π½Π° своими ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Ρ‚ΠΎΡ‡ΠΊΠ° А. Π£ΠΊΠ°Β­

Π·Π°Ρ‚ΡŒ, Π³Π΄Π΅ ΠΎΠ½Π° располоТСна (Π½Π° ΠΊΠ°ΠΊΠΎΠΉ оси ΠΈΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Β­

Π½ΠΎΠΌ ΡƒΠ³Π»Π΅) .

3) ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ нахоТдСния суммы большСго ΠΈ мСньшС­

Π³ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… чисСл.

4) Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ Β«ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π°Β»

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ дня Π½Π΅Π΄Π΅Π»ΠΈ (Ρ†Π΅Π»ΠΎΠΌΡƒ

числу ΠΎΡ‚ 1 Π΄ΠΎ 7) Π²Ρ‹Π΄Π°Π΅Ρ‚ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° количСство ΡƒΡ€ΠΎΠΊΠΎΠ² Π²

вашСм классС Π² этот дСнь.

5) Π”ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ (ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ) , Ρ‡Ρ‚ΠΎ для Π»ΡŽΠ±Ρ‹Ρ…

Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ А, Π’, Π‘ Ρ‚ΠΈΠΏΠ° Boolean ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ логичСских Π²Ρ‹Ρ€Π°Β­

ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ значСния (эквивалСнтны) :

а) A OR в и в OR А;

Π±) A AND Π’Π˜ Π’ AND A;

Π’) (A OR Π’) OR Π‘ И A OR Π‘;

Π“) (A AND Π’) AND Π‘ И A AND (Π’ AND Π‘) ;

Π”) A AND (A OR Π’) И А;

Π΅) A OR (A AND Π’) И А;

Π–) A AND (Π’ OR.Π‘) И (A AND Π’) OR (A AND Π‘) ;

3) A OR (Π’ AND Π‘) И (A OR Π’) AND (A OR Π‘)

6) Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ «ЦСлочислСнная Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°Β»

Π”Π°Π½ΠΎ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число Π». Найти сумму ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ послСднСй

Ρ†ΠΈΡ„Ρ€Ρ‹ этого числа.

7) Π”Π°Π½ΠΎ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число N. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ число М, ΠΊΠΎΡ‚ΠΎΒ­

Ρ€ΠΎΠ΅ образуСтся ΠΈΠ· числа N ΠΏΡƒΡ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Π½Ρ‹ послСднСй Ρ†ΠΈΡ„Ρ€Ρ‹ Π½Π°

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ наибольшСй Ρ†ΠΈΡ„Ρ€Ρ‹ Π² записи числа N. ΠŸΡ€ΠΈΠΌΠ΅Ρ€. N= 128 452,

М= 128 458

8) Π‘ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа ΠΈΠ· дСся­

Ρ‚ΠΈΡ‡Π½ΠΎΠΉ систСмы счислСния Π² Π΄Π²ΠΎΠΈΡ‡Π½ΡƒΡŽ.

9) ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π—Π°Π΄Π°Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ TV Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ сумму

элСмСнтов массива, порядковыС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ со

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этого элСмСнта

10) ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π”Π°Π½ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл. Найти Π² этом массивС минималь­

Π½Ρ‹ΠΉ элСмСнт ΠΎΡ‚ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт М. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² порядкС

возрастания всС Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° (ΠΎΡ‚; Π›/), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅

входят Π² Π΄Π°Π½Π½Ρ‹ΠΉ массив.

11) ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π”Π°Π½ цСлочислСнный массив А [ΠΏ] , срСди элСмСнтов Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΒ­

Π½Π°ΠΊΠΎΠ²Ρ‹Π΅. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ массив ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСмСнтов А [ΠΏ] .

12) ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с элСмСнтами массивов

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ наимСньший элСмСнт ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‡Π΅Ρ‚Π½ΠΎΠΉ строки

ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ А [М, N].

[ Π—Π°Π΄Π°Ρ‡Π° JavaScript ]: массивы, Ρ†ΠΈΠΊΠ»Ρ‹, условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’ΠΎ врСмя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈΒ Π±ΡƒΠ΄ΡƒΡ‚ задСйствованы массивы,Β Ρ†ΠΈΠΊΠ»Ρ‹, условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл и матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π°Π΄Π°Ρ‡Π°

  1. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° список состоящий ΠΈΠ· n элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” это ΠΎΡ†Π΅Π½ΠΊΠ°Β ΠΎΡ‚ 2 Π΄ΠΎ 5.
    ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ срСднСС арифмСтичСскоС ΠΈ Π² соотвСтствии с этим Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡƒΡ‡Π΅Π½ΠΈΠΊΡƒ: ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈΠΊ, Ρ…ΠΎΡ€ΠΎΡˆΠΈΡΡ‚, Ρ‚Ρ€ΠΎΠ΅Ρ‡Π½ΠΈΠΊ, Π΄Π²ΠΎΠ΅Ρ‡Π½ΠΈΠΊ.
  2. ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ.

РСшСниС

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части Π·Π°Π΄Π°Ρ‡ΠΈ трСбуСтся ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив с ΠΎΡ†Π΅Π½ΠΊΠ°ΠΌΠΈ, ΠΏΡ€ΠΈ этом для формирования ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ потрСбуСтся Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл.

НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство ΠΎΡ†Π΅Π½ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π» ΡƒΡ‡Π΅Π½ΠΈΠΊ, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Π»Π»Ρ‹ и пустой массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ срСдний Π±Π°Π»Π» ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡƒΡ‡Π΅Π½ΠΈΠΊΡƒ:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// ΠΊΠΎΠ»-Π²ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠΌ ΠΎΡ†Π΅Π½ΠΎΠΊ

var n = 20;

Β 

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива, содСрТащСго ΠΎΡ†Π΅Π½ΠΊΠΈ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°

var scores = [];

Β 

// минимальная ΠΎΡ†Π΅Π½ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΡ‡Π΅Π½ΠΈΠΊ

var min = 2;

Β 

// максимальная ΠΎΡ†Π΅Π½ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΡ‡Π΅Π½ΠΈΠΊ

var max = 5;

Β 

// срСдняя арифмСтичСская ΠΎΡ†Π΅Π½ΠΊΠ° ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°

var sum = 0;

Β 

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ содСрТащСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°

var who = »;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ провСсти Ρ†ΠΈΠΊΠ» Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ†Π΅Π½ΠΊΠ° ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² массив, Ρ†ΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒΡΡ n Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π±Ρ€Π°Π»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ€Π°Π½Π΅Π΅ количСство ΠΎΡ†Π΅Π½ΠΎΠΊ Π² массивС:

// Ρ†ΠΈΠΊΠ» формирования списка ΠΎΡ†Π΅Π½ΠΎΠΊ

for ( var i = 0; i < n; i++ ) {

Β 

// Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π±ΠΎΡ€Π° случайного числа ΠΎΡ‚ min Π΄ΠΎ max ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ этой ΠΎΡ†Π΅Π½ΠΊΠΈ Π² список всСх ΠΎΡ†Π΅Π½ΠΎΠΊ

scores[ i ] = Math. floor( Math.random() * (max — min + 1) ) + min;

Β 

// подсчСт суммы всСх ΠΎΡ†Π΅Π½ΠΎΠΊ

sum += scores[ i ];

}

Π’Π°ΠΊΠΆΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅ считаСтся срСднСС арифмСтичСскоС ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΠΎΡ†Π΅Π½ΠΊΠ°ΠΌΠΈ:

К Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ суммС Π±Π°Π»Π»ΠΎΠ² прибавляСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π°Π»Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ строкой Π²Ρ‹ΡˆΠ΅ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся i-Ρ‹ΠΌ элСмСнтом массива, поэтому ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Π² Π΅Π³ΠΎ порядковый Π½ΠΎΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ.

ПослС окончания Ρ†ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ сумму Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ sumΒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° количСство ΠΎΡ†Π΅Π½ΠΎΠΊ Π² сформированном массивС. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .length, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ сами Π·Π°Π΄Π°Π²Π°Π»ΠΈΒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ n достаточно Π±ΡƒΠ΄Π΅Ρ‚ просто Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° n, Π° Π·Π° Ρ‚Π΅ΠΌ ΠΎΠΊΡ€ΡƒΠ³Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

sum = Math.round( sum / n );

ПослС всСго ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒΒ Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡƒΡ‡Π΅Π½ΠΈΠΊΡƒ:

switch ( sum ) {

case 5:

who = ‘ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈΠΊ’;

break;

case 4:

who = ‘Ρ…ΠΎΡ€ΠΎΡˆΠΈΡΡ‚’;

break;

case 3:

who = ‘Ρ‚Ρ€ΠΎΠ΅Ρ‡Π½ΠΈΠΊ’;

break;

case 2:

who = ‘Π΄Π²ΠΎΠ΅Ρ‡Π½ΠΈΠΊ’;

break;

default:

who = ‘Π½Π΅ ясно ΠΊΡ‚ΠΎ’;

}

…и вывСсти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

// Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² консоль

console.log( ‘ΠžΡ†Π΅Π½ΠΊΠΈ: ‘ + scores );

console.log( ‘БрСдняя ΠΎΡ†Π΅Π½ΠΊΠ° — ‘ + sum );

console.log( ‘Π£Ρ‡Π΅Π½ΠΈΠΊ — ‘ + who );

Вторая Ρ‡Π°ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ

Для выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ части задания Π΄ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС количСства ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΡ†Π΅Π½ΠΎΠΊ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡ†Π΅Π½ΠΎΠΊ нСсколько, Ρ‚ΠΎ пСрСмСнная, хранящая ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ количСствС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ массивом. ΠœΡ‹ условимся, Ρ‡Ρ‚ΠΎ нулСвой элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ количСство Π΄Π²ΠΎΠ΅ΠΊ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠΌ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ β€” количСство Ρ‚Ρ€ΠΎΠ΅ΠΊ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ сформировали список ΠΎΡ†Π΅Π½ΠΎΠΊ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ°, поэтому количСство ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΡ†Π΅Π½ΠΎΠΊ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ:

var most = [ 0, 0, 0, 0 ];

Π’Π½ΡƒΡ‚Ρ€ΠΈΒ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ подсчСт количСства ΠΎΡ†Π΅Π½ΠΎΠΊ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch:

switch ( scores[ i ] ) {

case 5:

most[ 3 ]++;

break;

case 4:

most[ 2 ]++;

break;

case 3:

most[ 1 ]++;

break;

case 2:

most[ 0 ]++;

break;

}

Но Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ссли ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Π»Π» увСличится с пятСрки, скаТСм Π΄ΠΎ 100, придСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ условий, поэтому ΠΌΡ‹ запишСм Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅:

// ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»-Π²Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΎΡ†Π΅Π½ΠΎΠΊ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ порядковый Π½ΠΎΠΌΠ΅Ρ€ для ΠΎΡ†Π΅Π½ΠΎΠΊ соотвСтствуСт Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ score — min

most[ scores[ i ] — min ]++;

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ вычисляСм индСкс элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π΄ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ: scores[ i ] - min

scores[ i ] — это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ сгСнСрированная ΠΎΡ†Π΅Π½ΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 5, Π° min β€” это минимальная ΠΎΡ†Π΅Π½ΠΊΠ°, равная 2. Если Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ ΠΈΠ· пяти Π΄Π²Π°, получится Ρ‚Ρ€ΠΈ, 3 β€” это порядковый Π½ΠΎΠΌΠ΅Ρ€ элСмСнта Π² массивС most, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ количСство пятСрок ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

ПослС всСго этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ вывСсти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ количСствС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ†Π΅Π½ΠΎΠΊ:

// ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ счСтчика Ρ€Π°Π²Π½ΠΎΠ³ΠΎ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠ΅

i = max;

Β 

// ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΎΡ†Π΅Π½ΠΊΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, большС min

while ( i >= min ) {

Β 

// Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠ»-Π²Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ

console.log( ‘Кол-Π²ΠΎ ‘ + i + ‘-ΠΊ: ‘ + most[ i — 2 ] );

Β 

// Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика

i—;

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния скрипта

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ JavaScript: Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива | ΠšΡ€ΠΈΡ Π‘ΡƒΡ€Π³ΠΈΠ½

БСрия статСй ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Javascript с использованиСм ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ этом постС ΠΌΡ‹ расскаТСм, ΠΊΠ°ΠΊ Π½Π°ΠΉΡ‚ΠΈ сумму массива.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ рассмотрим стандартный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Javascript, этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅Π΄ΠΎΡƒΠΌΠ΅Π½ΠΈΠ΅.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ способ

 var numbers = [10, 20, 30, 40] // суммируСтся Π΄ΠΎ 100 
var sum = 0; for (var i = 0; i sum + = numbers [i]
}

Π’ The Standard Way ΠΌΡ‹ сначала объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sum ΠΈ устанавливаСм Π΅Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ стандартный Ρ†ΠΈΠΊΠ» for для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° нашСго массива чисСл ΠΈ суммирования массива с использованиСм суммы . ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅, Π½ΠΎ Π½Π΅ совсСм Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Одна ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с этим Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ вносим ΠΌΡƒΡ‚Π°Ρ†ΠΈΡŽ Π² наш ΠΊΠΎΠ΄. ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, ΠΌΡ‹ создали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sum , Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.Π­Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ для удобочитаСмости, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ΠΎ ошибкам, Ρ‡Π΅ΠΌ ΠΊΠΎΠ΄, ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‰ΠΈΠΉ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ.

The Rewritten Way

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Javascript прСдоставляСт Π½Π°ΠΌ способы написания нСизмСняСмого ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ Π½ΠΈΠΆΠ΅. ИзмСнСния Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ .

  const  numbers = [10, 20, 30, 40] // сумма Π΄ΠΎ 100 // функция для слоТСния Π΄Π²ΡƒΡ… чисСл. Π›Π΅Π³ΠΊΠΈΠΉ! 
const add = (a, b) =>
a + b

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ числа с var Π½Π° const .ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ числа постоянны; это Π½Π΅ измСнится. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ const ΠΈ let, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ эту Ρ„Π°Π½Ρ‚Π°ΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ Mozilla.

Π”Π°Π»Π΅Π΅ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ add . Π­Ρ‚Π° функция просто Π±Π΅Ρ€Π΅Ρ‚ Π΄Π²Π° числа ΠΈ складываСт ΠΈΡ…. Если Π²Ρ‹ Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ этот синтаксис, я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ эту страницу MDN, ΠΏΠΎΡΠ²ΡΡ‰Π΅Π½Π½ΡƒΡŽ функциям стрСлок.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ напишСм сСгмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСт наш массив.

 const numbers = [10, 20, 30, 40] // сумма Π΄ΠΎ 100 // функция для слоТСния Π΄Π²ΡƒΡ… чисСл.Π›Π΅Π³ΠΊΠΈΠΉ! 
const add = (a, b) =>
a + b // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сокращСниС для суммирования нашСго массива
const sum = numbers. reduce (add)

Одна строка, ΠΈ всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ. Работая слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ устанавливаСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sum ΠΊΠ°ΠΊ константу. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эта пСрСмСнная установлСна, ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° измСнялась, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ.

Π”Π°Π»Π΅Π΅ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ выполняСм ΠΌΠ΅Ρ‚ΠΎΠ΄ reduce для чисСл ΠΈ устанавливаСм Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sum , устраняя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ.ΠœΠ΅Ρ‚ΠΎΠ΄ reduce ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ нашСм случаС Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π°. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ.

  1. аккумулятор — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ послСдним ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ.
  2. currentValue — Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ элСмСнт Π² массивС.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π΄Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ , значСния аккумулятора ΠΈ currentValue ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² a ΠΈ b Π² нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ слоТСния соотвСтствСнно.

Для большСй ясности Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ происходит, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΅Π³ΠΎ шаг Π·Π° шагом для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Π² нашСм массивС ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ сокращСния.

ΠŸΠ΅Ρ€Π²Π°Ρ итСрация: Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ массива значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: аккумулятор = 10 ΠΈ currentValue = 20 , слоТив вмСстС, ΠΌΡ‹ Π²Π΅Ρ€Π½Π΅ΠΌ 30 .

Вторая итСрация: Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ массива значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: аккумулятор = 30 ΠΈ currentValue = 30 , слоТив вмСстС, ΠΌΡ‹ Π²Π΅Ρ€Π½Π΅ΠΌ 60 .

Π’Ρ€Π΅Ρ‚ΡŒΡ итСрация: Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ массива значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: аккумулятор = 60 ΠΈ currentValue = 40 слоТив вмСстС, ΠΌΡ‹ Π²Π΅Ρ€Π½Π΅ΠΌ 100 .

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ — это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π΅Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ сокращСния станСт довольно простым для понимания.ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ со ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ MDN ΠΎ Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€Π°Ρ… для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π― Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ сокращСниС.

The Wrap

Π—Π°ΠΌΠ΅Π½ΠΈΠ² стандартный Ρ†ΠΈΠΊΠ» Π½Π° reduce, ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ ΠΌΡƒΡ‚Π°Ρ†ΠΈΡŽ ΠΈΠ· нашСго ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ чистым ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ для чтСния, Ρ‡Ρ‚ΠΎ принСсСт Π½Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста нашСго прилоТСния.

Π’ блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ я расскаТу ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅ΠΌΠ°Ρ… ΠΎ пСрСписывании основных ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Javascript с использованиСм Π½ΠΎΠ²Ρ‹Ρ… стандартов. А ΠΏΠΎΠΊΠ° я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅, для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Ρ‚Π΅ΠΌΠ°ΠΌ.

ПолСзноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

Array.prototype.reduce () — JavaScript | MDN

ΠœΠ΅Ρ‚ΠΎΠ΄ reduce () выполняСт Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€
функция (ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ прСдоставляСтС) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ
Ρ†Π΅Π½ΠΈΡ‚ΡŒ.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ этого ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° хранится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ GitHub. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти свой Π²ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ https://github.com/mdn/interactive-examples ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π½Π°ΠΌ запрос Π½Π° пСрСнос.

Ѐункция Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

  1. Аккумулятор
  2. Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  3. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ индСкс
  4. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ массив

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

  arr.reduce (callback (аккумулятор, currentValue, [, index [, array]]) [, initialValue])  

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

callback

Ѐункция, выполняСмая для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² массивС (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, Ссли Π½Π΅Ρ‚
ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ initialValue ).

ВрСбуСтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

аккумулятор
ΠΠ°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ‚ значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ . Π­Ρ‚ΠΎ
Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π½Π΅Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ послСднСм Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΠΈΠ»ΠΈ
initialValue , Ссли ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ прСдоставлСно (см. НиТС).
Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ элСмСнт Π² массивС.
индСкс Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
ИндСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ элСмСнта Π² массивС. НачинаСтся с индСкса
0 , Ссли ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ initialValue . Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС запускаСтся
из индСкса 1 .
массив Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
Π‘Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ массив reduce () .
Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для использования Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅
ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ .Если Π½Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
прСдоставлСн, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² массивС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ
аккумулятор Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΊΠ°ΠΊ
Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ . Π’Ρ‹Π·ΠΎΠ² reduce () для пустого массива
Π±Π΅Π· initialValue Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ TypeError .

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

ЕдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ.

ΠœΠ΅Ρ‚ΠΎΠ΄ reduce () выполняСт ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для
ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ присвоСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π² массивС, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

  1. аккумулятор
  2. Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  3. Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ИндСкс
  4. массив

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° аккумулятор ΠΈ
currentValue ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Если
initialValue прСдоставляСтся Π² Π²Ρ‹Π·ΠΎΠ²Π΅ reduce () ,
Ρ‚ΠΎΠ³Π΄Π° аккумулятор Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½
initialValue , Π° currentValue Π±ΡƒΠ΄Π΅Ρ‚
Ρ€Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² массивС. Если Π½Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ аккумулятор Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²
массив, Π° currentValue Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если initialValue Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ,
reduce () Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, начиная с индСкса
1 , пропуская ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс. Если Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ
ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΎΠ½ начнСтся с индСкса 0 .

Если массив пуст ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ initialValue ,
TypeError Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ.

Если Π² массивС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт (нСзависимо ΠΎΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ) ΠΈ Π½Π΅Ρ‚
initialValue прСдоставляСтся, ΠΈΠ»ΠΈ Ссли
initialValue прСдоставляСтся, Π½ΠΎ массив пуст, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ соло
Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π±Π΅Π· Π·Π²ΠΎΠ½ΠΊΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π·Π²ΠΎΠ½ΠΊΠ° .

ΠŸΠΎΡ‡Ρ‚ΠΈ всСгда бСзопаснСС ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ
ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Π²Ρ‹Π²ΠΎΠ΄Π° Π±Π΅Π·
initialValue , ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

  let maxCallback = (acc, cur) => Math.max (acc.x, cur.x);
ΠΏΡƒΡΡ‚ΡŒ maxCallback2 = (max, cur) => Math.max (max, cur);


[{x: 2}, {x: 22}, {x: 42}] .reduce (maxCallback);
[{x: 2}, {x: 22}].ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ (maxCallback);
[{x: 2}] .reduce (maxCallback);
[] .reduce (maxCallback);


[{x: 22}, {x: 42}] .map (el => el.x)
                        .reduce (maxCallback2, -Π‘Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ);
  

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ reduce ()

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ использованиС reduce () :

  [0, 1, 2, 3, 4] . reduce (function (аккумулятор, currentValue, currentIndex, array) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ аккумулятор + currentValue
})
  

ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π° с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ значСниями Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ
Π·Π²ΠΎΠ½ΠΈΡ‚Π΅ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ:

ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² итСрация аккумулятор Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ИндСкс массив Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 0 1 1 [0, 1, 2, 3, 4] 1
Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 1 2 2 [0, 1, 2, 3, 4] 3
Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 3 3 3 [0, 1, 2, 3, 4] 6
Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 6 4 4 [0, 1, 2, 3, 4] 10

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ reduce () , Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ послСднСго ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.
Π²Ρ‹Π·ΠΎΠ² ( 10 ).

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ стрСлки
вмСсто ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ даст Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ΄ Π²
Π±Π»ΠΎΠΊ Π²Ρ‹ΡˆΠ΅:

  [0, 1, 2, 3, 4] . reduce ((аккумулятор, currentValue, currentIndex, array) => аккумулятор + currentValue)
  

Если Π±Ρ‹ Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ initialValue Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°
Π΄ΠΎ reduce () , Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  [0, 1, 2, 3, 4].reduce ((аккумулятор, currentValue, currentIndex, array) => {
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ аккумулятор + currentValue
}, 10)
  
ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² итСрация аккумулятор Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ИндСкс массив Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 10 0 0 [0, 1, 2, 3, 4] 10
Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 10 1 1 [0, 1, 2, 3, 4] 11
Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 11 2 2 [0, 1, 2, 3, 4] 13
Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ 13 3 3 [0, 1, 2, 3, 4] 16
пятый Π·Π²ΠΎΠ½ΠΎΠΊ 16 4 4 [0, 1, 2, 3, 4] 20

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ reduce () , Π² этом случаС Π±ΡƒΠ΄Π΅Ρ‚ 20 .

 


if (! Array.prototype.reduce) {
  Object.defineProperty (Array.prototype, 'ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ', {
    value: function (callback) {
      if (this === null) {
        throw new TypeError ('Array.prototype.reduce' +
          'Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΏΠΎ null ΠΈΠ»ΠΈ undefined');
      }
      if (typeof callback! == 'функция') {
        Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ TypeError (ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² +
          'Π½Π΅ функция');
      }

      
      var o = Object (это);

      
      var len = o.length >>> 0;

      
      var k = 0;
      Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ var;

      Ссли (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.length> = 2) {
        Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ [1];
      } Π΅Ρ‰Π΅ {
        while (k  = len) {
          throw new TypeError ('УмСньшСниС пустого массива' +
            'Π±Π΅Π· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния');
        }
        Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = o [k ++];
      }

      
      Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ (k  

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² JavaScript
ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ .defineProperty () , Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ„ΠΈΠ»
Array.prototype ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ
нСпСрСчислимый .

Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС значСния массива

  let sum = [0, 1, 2, 3] .reduce (function (аккумулятор, currentValue) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ аккумулятор + currentValue
}, 0)


  

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ записываСтся стрСлкой:

  let total = [0, 1, 2, 3] .reduce (
  (аккумулятор, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) => аккумулятор + Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅,
  0
)  

Π‘ΡƒΠΌΠΌΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния, содСрТащиСся Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ
initialValue , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ» Ρ‡Π΅Ρ€Π΅Π· Π²Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

  ΠΏΡƒΡΡ‚ΡŒ initialValue = 0
let sum = [{x: 1}, {x: 2}, {x: 3}]. reduce (function (аккумулятор, currentValue) {
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½Ρ‹ΠΉ аккумулятор + currentValue.x
}, ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅)

console.log (сумма)
  

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ записываСтся стрСлкой:

  ΠΏΡƒΡΡ‚ΡŒ initialValue = 0
let sum = [{x: 1}, {x: 2}, {x: 3}]. reduce (
    (аккумулятор, currentValue) => аккумулятор + currentValue.x
    , ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
)

console.log (сумма)  

БглаТиваниС массива массивов

  let flattened = [[0, 1], [2, 3], [4, 5]].ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ(
  function (аккумулятор, currentValue) {
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ аккумулятор .concat (currentValue)
  },
  []
)

  

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ записываСтся стрСлкой:

  let flattened = [[0, 1], [2, 3], [4, 5]]. Reduce (
  (аккумулятор, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) => аккумулятор.concat (Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅),
  []
)
  

ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ экзСмпляров Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

  let names = ['Алиса', 'Π‘ΠΎΠ±', 'Π’ΠΈΡ„Ρ„', 'Π‘Ρ€ΡŽΡ', 'Алиса']

let counttedNames = names.reduce (function (allNames, name) {
  if (имя в allNames) {
    allNames [имя] ++
  }
  Π΅Ρ‰Π΅ {
    allNames [имя] = 1
  }
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ allNames
}, {})


  

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ собствСнности

  let people = [
  {имя: 'Алиса', возраст: 21},
  {имя: 'Макс', возраст: 20},
  {имя: 'Π”ΠΆΠ΅ΠΉΠ½', возраст: 20}
];

function groupBy (objectArray, property) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ objectArray.reduce (function (acc, obj) {
    let key = obj [свойство]
    if (! acc [ΠΊΠ»ΡŽΡ‡]) {
      acc [ΠΊΠ»ΡŽΡ‡] = []
    }
    acc [ΠΊΠ»ΡŽΡ‡] .push (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π² соотв.
  }, {})
}

let groupedPeople = groupBy (люди, 'возраст')








  

БвязываниС массивов, содСрТащихся Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° распространСния ΠΈ
initialValue

 

ΠΏΡƒΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡ = [{
  имя: 'Анна',
  ΠΊΠ½ΠΈΠ³ΠΈ: ['Библия', 'Π“Π°Ρ€Ρ€ΠΈ ΠŸΠΎΡ‚Ρ‚Π΅Ρ€'],
  возраст: 21
}, {
  имя: 'Π‘ΠΎΠ±',
  ΠΊΠ½ΠΈΠ³ΠΈ: [Β«Π’ΠΎΠΉΠ½Π° ΠΈ ΠΌΠΈΡ€Β», Β«Π ΠΎΠΌΠ΅ΠΎ ΠΈ Π”ΠΆΡƒΠ»ΡŒΠ΅Ρ‚Ρ‚Π°Β»],
  возраст: 26
}, {
  имя: 'Алиса',
  ΠΊΠ½ΠΈΠ³ΠΈ: [«ВластСлин ΠΊΠΎΠ»Π΅Ρ†Β», «БияниС»],
  возраст: 18
}]



ΠΏΡƒΡΡ‚ΡŒ allbooks = Π΄Ρ€ΡƒΠ·ΡŒΡ. ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ (функция (аккумулятор, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) {
  return [... аккумулятор, ... currentValue.books]
}, ['Alphabet'])





  

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ элСмСнты Π² массивС

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ срСду, ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΡƒΡŽ с
УстановитС ΠΈ Array.from () , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
let ordersArray = Array.from (new Set (myArray)) , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ
ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ элСмСнты Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

  let myArray = ['a', 'b', 'a', 'b', 'c', 'e', ​​'e', ​​'c', 'd', 'd', 'd', 'd']
ΠΏΡƒΡΡ‚ΡŒ myOrderedArray = myArray.ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ (функция (аккумулятор, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) {
  if (аккумулятор.indexOf (currentValue) === -1) {
    аккумулятор.push (currentValue)
  }
  Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½Ρ‹ΠΉ аккумулятор
}, [])

console.log (myOrderedArray)  

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ .filter (). map () Π½Π° .reduce ()

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Array.filter () , Π·Π°Ρ‚Π΅ΠΌ Array.map () просматриваСт массив
Π΄Π²Π°ΠΆΠ΄Ρ‹, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ эффСкта, проходя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
Array.reduce () , Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивным. (Если Π²Π°ΠΌ нравятся ΠΏΠ΅Ρ‚Π»ΠΈ for, Π²Ρ‹
ΠΌΠΎΠΆΠ΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массива .forEach () ).

  постоянныС числа = [-5, 6, 2, 0,];

const doubledPositiveNumbers = numbers.reduce ((аккумулятор, currentValue) => {
  if (currentValue> 0) {
    const doubled = currentValue * 2;
    аккумулятор.ΠΏΡƒΡˆ (сдвоСнный);
  }
  Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½Ρ‹ΠΉ аккумулятор;
}, []);

console.log (doubledPositiveNumbers);  

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

 
function runPromiseInSequence (arr, input) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ arr.reduce (
    (ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, тСкущая функция) => Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ.Π·Π°Ρ‚Π΅ΠΌ (currentFunction),
    Promise.resolve (Π²Π²ΠΎΠ΄)
  )
}


функция p1 (a) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ ((Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ) => {
    Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (a * 5)
  })
}


функция p2 (a) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ ((Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ) => {
    Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (a * 2)
  })
}


функция f3 (a) {
 Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ * 3
}


функция p4 (a) {
  Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ ((Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ) => {
    Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (a * 4)
  })
}

const PromiseArr = [p1, p2, f3, p4]
runPromiseInSequence (PromiseArr, 10)
  . then (console.log)
  

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ композиция, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Ρ‚Ρ€ΡƒΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄

 
const double = Ρ… => Ρ… + Ρ…
константная Ρ‚Ρ€ΠΎΠΉΠΊΠ° = Ρ… => 3 * Ρ…
константная Ρ‡Π΅Ρ‚Π²Π΅Ρ€ΠΊΠ° = Ρ… => 4 * Ρ…


const pipe = (...functions) => input => functions.reduce (
    (acc, fn) => fn (acc),
    Π’Ρ…ΠΎΠ΄
)


const multiply6 = Ρ‚Ρ€ΡƒΠ±Π° (двойная, тройная)
const multiply9 = Ρ‚Ρ€ΡƒΠ±Π° (Ρ‚Ρ€ΠΎΠΉΠΊΠ°, Ρ‚Ρ€ΠΎΠΉΠΊΠ°)
const multiply16 = Ρ‚Ρ€ΡƒΠ±Π° (чСтвСрная, чСтвСрная)
const multiply24 = Ρ‚Ρ€ΡƒΠ±Π° (двойная, тройная, чСтвСрная)


ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ6 (6)
ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ9 (9)
ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ16 (16)
ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ24 (10)

  

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ сокращСниС

  if (! Array.prototype.mapUsingReduce) {
  Array.prototype.mapUsingReduce = function (callback, thisArg) {
    Π²Π΅Ρ€Π½ΠΈ это.ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ (функция (mappedArray, currentValue, index, array) {
      mappedArray [индСкс] = callback.call (thisArg, currentValue, индСкс, массив)
      Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ mappedArray
    }, [])
  }
}

[1, 2,, 3] .mapUsingReduce (
  (currentValue, index, array) => currentValue + index + array.length (Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, индСкс, массив) => currentValue + index + array.length
)

  

Π’Π°Π±Π»ΠΈΡ†Ρ‹ BCD Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

ИспользованиС Array.reduce для суммирования свойства Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Β· GitHub

ИспользованиС Array.reduce для суммирования свойства Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Β· GitHub

МгновСнно Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΊΠΎΠ΄ΠΎΠΌ, Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

ИспользованиС Array.reduce для суммирования свойства Π² массивС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

var accounts = [
{имя: 'ДТСймс Π‘Ρ€Π°ΡƒΠ½', msgCount: 123},
{имя: 'Π‘Ρ‚ΠΈΠ²ΠΈ Π£Π°Π½Π΄Π΅Ρ€', msgCount: 22},
{имя: 'Π₯ΠΈΡ‚Ρ€Ρ‹ΠΉ камСнь', msgCount: 16},
{name: 'Otis Redding', msgCount: 300} // Π£ ΠžΡ‚ΠΈΡΠ° большС всСго сообщСний
];
// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ сумму msgCount prop ΠΏΠΎ всСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² массивС
var msgTotal = accounts. ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ (функция (прСдыдущая, тСкущая) {
return prev + cur.msgCount;
}, 0);
console.log ('ВсСго сообщСний:', msgTotal); // ВсСго сообщСний: 461

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ это дСйствиС Π² настоящСС врСмя.

Π’Ρ‹ вошли Π² систСму с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎΠΌ.ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ сСанс.
Π’Ρ‹ Π²Ρ‹ΡˆΠ»ΠΈ ΠΈΠ· систСмы Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΎΠΊΠ½Π΅. ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ сСанс.

сумма чисСл Π² массивС с использованиСм Ρ†ΠΈΠΊΠ»Π° for Π² javascript

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ array reduce () для поиска произвСдСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript. На самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. Как Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ XOR элСмСнтов массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Javascript, этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅Π΄ΠΎΡƒΠΌΠ΅Π½ΠΈΠ΅.Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ массив суммы Π΄Π²ΡƒΡ… чисСл Π² Javascript, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ array.reduce (). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΈΠΏ N ΠΊ float, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ синтаксис. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ выполняСм ΠΌΠ΅Ρ‚ΠΎΠ΄ reduce для чисСл ΠΈ устанавливаСм Π΅Π³ΠΎ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ сумму, устраняя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ. Π¦ΠΈΠΊΠ» while ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для нахоТдСния суммы Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл. Вопрос / Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ addNeighbors, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив чисСл ΠΈ добавляСт ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ число Π² массивС ΠΊ числу рядом с Π½ΠΈΠΌ.ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» for для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх элСмСнтов массива. Π’ этом руководствС ΠΌΡ‹ Π½Π°ΠΉΠ΄Π΅ΠΌ сумму n Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл, создав ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² JavaScript. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ваша ΡΡ‚Π°Ρ‚ΡŒΡ появляСтся Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ страницС GeeksforGeeks, ΠΈ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π³ΠΈΠΊΠ°ΠΌ. let numbers = [2, 8, 1, 16, 4, 3, 9] var sum = 0 var counter = 0 // Π’Π²Π΅Π΄ΠΈΡ‚Π΅ свой ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅, ΠΏΠΎΠΊΠ° counter [адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½], Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ содСрТаниСм. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ простой ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска суммы элСмСнтов массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript.ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ со ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ MDN ΠΎ Ρ€Π΅Π΄ΡƒΠΊΡ‚ΠΎΡ€Π°Ρ… для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. БСрия статСй ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Javascript с использованиСм ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. // функция для слоТСния Π΄Π²ΡƒΡ… чисСл. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ добавляСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число ΠΊ нашСй ΠΎΠ±Ρ‰Π΅ΠΉ суммС. Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² массив Π² JavaScript? Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡβ€¦ 5 ΠΌΠ°Ρ€Ρ‚Π° 2017 Π³.… ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ стандартный Ρ†ΠΈΠΊΠ» for для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² нашСго массива ΠΈ суммирования массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ суммы. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ массив ΠΈ суммируйтС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа JavaScript; ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ чисСл с Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ числом Ρ†ΠΈΡ„Ρ€ JavaScript; Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for Π½Π° страницС JSP? Π‘ΡƒΠΌΠΌΠ° массива - это нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² массив, пройдя Ρ‡Π΅Ρ€Π΅Π· вСсь массив.Как ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ URL-адрСс Π² Π½ΠΎΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Ѐункция reduce () выполняСт ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния массива (слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ). Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ Π½Π°ΠΉΡ‚ΠΈ сумму массива Π² Java, ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅. ПишСм ΠΊΠΎΠ΄ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ? Π― Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ сокращСниС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ array reduce () для нахоТдСния суммы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript. Как Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ элСмСнты массива Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Π’Ρ€Π΅Ρ‚ΡŒΡ итСрация: Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ массива значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: аккумулятор = 60 ΠΈ currentValue = 40, слоТСнныС вмСстС, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ 100.Вычислили сумму, пСрСбирая массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ прСдлагаСтся ввСсти число. Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Ρ‚Ρƒ Ρ‚ΠΈΠΏΠ° Π²Π²ΠΎΠ΄Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π΄Π΄-ΠΌΠΌ-Π³Π³Π³Π³ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HTML? ΠΏΡƒΡ‚Π΅ΠΌ нахоТдСния суммы ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ. Π’ нашСм случаС Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π°. Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π»ΠΈ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² JavaScript? ΠžΠΏΡ‹Ρ‚. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½Π° Π²Ρ…ΠΎΠ΄Π΅ 6, Ρ‚ΠΎ сумма Π±ΡƒΠ΄Π΅Ρ‚ 1 + 2 + 3 + 4 + 5 + 6 = 21; Π¦ΠΈΠΊΠ» Β«ForΒ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для повторСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° извСстноС количСство Ρ€Π°Π·. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π½Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ часто. ΠŸΠ΅Ρ€Π²Π°Ρ итСрация: Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ массива значСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: аккумулятор = 10 ΠΈ currentValue = 20, слоТСнныС вмСстС, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ 30. Π“Π΄Π΅ я ошибаюсь? В… ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° JavaScript для поиска суммы чисСл - Руководство ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ 10 Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ HTML ΠΈ CSS. Π­Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ для удобочитаСмости, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ΠΎ ошибкам, Ρ‡Π΅ΠΌ ΠΊΠΎΠ΄, ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‰ΠΈΠΉ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ. JQuery | УстановитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ тСкстового поля Π²Π²ΠΎΠ΄Π°, ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ
count {сумма + = числа [счСтчик] счСтчик + = 1} Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΈΠ· массива чисСл Π²ΠΎ врСмя выполнСния Ρ†ΠΈΠΊΠ»Π° ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Ρƒ.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ» Π΄Π»ΠΈΠ½Ρƒ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства .length. const numbers = [10, 20, 30, 40] // суммируСтся Π΄ΠΎ 100, Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² любой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ JavaScript, Π§Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅: innerText, innerHTML ΠΈ textContent, Π¨Π°Π±Π»ΠΎΠ½Ρ‹ для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с отслСТиваниСм состояния Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ, ΠŸΡΡ‚ΡŒ способов Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ строку Π² Javascript, 3 Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ поискС Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ курса Udemy, Π‘Π°ΠΌΡ‹ΠΉ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Π² ΠΌΠΈΡ€Π΅ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ Tic-Tac-Toe ΠΏΠΎ JavaScript, Π¦ΠΈΠΊΠ» ΠΏΠΎ массивам ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π² JavaScript, ΠšΠ»Π°ΡΡΡ‹ JavaScript ES6, ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Π½Ρ‹Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ.ИзмСнСния Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ. ΡΡ€ΠΊΠΎΡΡ‚ΡŒ_4 Как я ΠΌΠΎΠ³Ρƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ складываСт всС числа Π² массивС Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² JavaScript? Но это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² массив Π½Π° части ΠΈ найдя сумму ΠΊΠ°ΠΆΠ΄ΠΎΠΉ части ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚.Π΅. close, link Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ стандартный Ρ†ΠΈΠΊΠ» for для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² нашСго массива ΠΈ суммирования массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ суммы. ЗдравствуйтС, Π΄Ρ€ΡƒΠ·ΡŒΡ! Π― снова застрял Π² настройкС Ρ†ΠΈΠΊΠ»Π° for ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° for Π² этом массивС.ΠΊΠΎΠ΄. Как Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство Π΄Π½Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π΄Π°Ρ‚Π°ΠΌΠΈ Π² javascript? Когда количСство Ρ€Π°Π· Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстно, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» «Пока». Как Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ обСщания, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² массивС: ВСрсия PHP: 4.0.4+ Π–ΡƒΡ€Π½Π°Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ PHP: ВСрсии PHP Π΄ΠΎ 4. 2.1 ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ сам ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ массив ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΈ строки Π² числа (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΈΡ… Π² ноль, Π² зависимости ΠΎΡ‚ ΠΈΡ… значСния. ) Как динамичСски ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ элСмСнт изобраТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Если Π²Ρ‹ Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ этот синтаксис, я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ эту страницу MDN, ΠΏΠΎΡΠ²ΡΡ‰Π΅Π½Π½ΡƒΡŽ функциям стрСлок.Π’ΠΎ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ i добавляСтся ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ суммы, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i увСличиваСтся Π½Π° 1. Π’Π΅ΠΌΠ°: JavaScript / jQuery ΠŸΡ€Π΅Π΄. | Π‘Π»Π΅Π΄. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ простой ΠΌΠ΅Ρ‚ΠΎΠ΄ для доступа ΠΊ элСмСнтам массива ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ индСкса ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ» для поиска суммы ΠΈ произвСдСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ сумму всСх чисСл Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ числа, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для Ρ†ΠΈΠΊΠ»Π° Π² Java. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число: 100 Π‘ΡƒΠΌΠΌΠ° Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл: 5050. Как Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ случайный элСмСнт ΠΈΠ· массива Π² JavaScript? ; pop Π±Π΅Ρ€Π΅Ρ‚ элСмСнт с ΠΊΠΎΠ½Ρ†Π°.ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, ΠΌΡ‹ создали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ сумму, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅. Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ HTML-ΠΊΠΎΠ΄ Π² div с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ число Π² массивС Π² JavaScript Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: var числа = [1,2,3,4] var sum = 0; for (var i = 0; i [email protected] Как Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ случайный Ρ†Π²Π΅Ρ‚ ΠΈΠ· массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CSS ΠΈ JavaScript? Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ: ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 1 устанавливаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ запуском Ρ†ΠΈΠΊΠ»Π° (var i = 0) .Π’ стандартном способС ΠΌΡ‹ сначала объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sum ΠΈ устанавливаСм Π΅Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π²Π½ΠΎΠ΅ Π½ΡƒΠ»ΡŽ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π΅Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ сокращСния станСт довольно простым для понимания. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ сумму Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΈ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл Π½Π° языкС программирования Java. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ числа с var Π½Π° const. Π£ мСня всС это ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» 0 вмСсто NaN, Ссли ΠΌΠΎΠΉ массив пуст. Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ JavaScript Π² PHP? Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку JSON Π² массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² JSON с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript? Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ совпадСниС Π΄Π²ΡƒΡ… элСмСнтов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ jQuery / JavaScript? ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ простой ΠΌΠ΅Ρ‚ΠΎΠ΄ для доступа ΠΊ элСмСнтам массива ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ индСкса ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ» для поиска суммы ΠΈ произвСдСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript. Π‘ΡƒΠΌΠΌΠ° массива: сравнСниС рСкурсии с Ρ†ΠΈΠΊΠ»ΠΎΠΌ for ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ES6 Π² JavaScript. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° JavaScript. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ массив с ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ количСством числовых записСй, ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ рСкурсия, ΠΈ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ простой Ρ†ΠΈΠΊΠ», ΠΈ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ES6 Π½Π° суммированиС всСх записСй массива, Ρ‚.Π΅. Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования массивов - структура Π΄Π°Π½Π½Ρ‹Ρ… с ΠΈΠΌΠ΅Π½Π΅ΠΌ stack .. var numbers = [10, 20, 30, 40] // суммируСтся Π΄ΠΎ 100, for (var i = 0; я

Π”Π΅ΡˆΠ΅Π²Ρ‹ΠΉ Π³Ρ€Π°Π²ΠΈΠΉ рядом со ΠΌΠ½ΠΎΠΉ,
ΠžΠΏΡ‚ΠΎΠΌ Π§Π°ΠΉ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΠΊΠ°Ρ… ВСликобритания,
НСмСцкий сливовый Ρ‚ΠΎΡ€Ρ‚,
Π˜Ρ‰Ρƒ Π΄Ρ€ΡƒΠ³Π° для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ½Ρ†Π° свСта,
Flak 38 105ΠΌΠΌ,
Π¦Π΅Π½Π° подноса для Ρ‚ΠΎΡ€Ρ‚Π° Π² Π¨Ρ€ΠΈ-Π›Π°Π½ΠΊΠ΅,
ΠšΠ°Π»ΠΎΡ€ΠΈΠΉΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ„Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π»ΠΈΠΊΠ΅Ρ€Π° Π½Π° ΠΏΠΎΡ€Ρ†ΠΈΡŽ,

Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Π²Π΅ суммы Π² JavaScript | Π”ΠΆΠΎΡ€Π΄Π°Π½ ΠœΡƒΡ€

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡƒΡ‚ΡŒ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ°Ρ€Ρƒ элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² суммС Π΄Π°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ число, Π»ΠΎΠ³ΠΈΠΊΡƒ этой Π·Π°Π΄Π°Ρ‡ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ:

  1. Для currentElement Π² массивС , ΡΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сумму currentElement ΠΈ nextElement с Ρ†Π΅Π»ΡŒΡŽ.Если sum === target , Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ индСксы currentElement ΠΈ nextElement .
  2. ΠŸΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ массив , провСряя ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт плюс ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт с Π±ΠΎΠ»Π΅Π΅ высоким индСксом, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΏΠ°Ρ€Π°.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠ±ΠΎΠΉ силы . Π­Ρ‚ΠΎ нСэффСктивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву , ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π±ΡƒΠ΄Π΅Ρ‚ тСстовый ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ массив с тысячами элСмСнтов.Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ элСмСнты, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… === target , находятся Π² индСксах [array.length - 2, array.length - 1] .

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ этих Π΄Π²ΡƒΡ… элСмСнтов, элСмСнты n-1 ΠΈΠ· массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° для currentElement .

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ currentElement Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом послС Π² массивС , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ элСмСнты Π΄ΠΎ currentElement ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹.

Π­Ρ‚ΠΎΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ тысячам Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.

Π’ΠΎΡ‚ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ всСго массива . Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ малСнький Π²Π²ΠΎΠ΄; ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС этот Ρ‚ΠΈΠΏ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… .

Окно , красноС ΠΎΠΊΠ½ΠΎ , прСдставляСт currentElement . Π—Π΅Π»Π΅Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прСдставляСт всС элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ с currentElement для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ суммы === target .Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² Π·Π΅Π»Π΅Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° итСрация.

Π’Ρ‹Ρ€Π°ΠΆΠ°ΡΡΡŒ матСматичСски, сущСствуСт n ** 2 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€ Π² массивС . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, самый Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ (Ρ…ΡƒΠ΄ΡˆΠΈΠΉ случай), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, составляСт O (n ** 2) Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ нСвСроятно нСэффСктивно.

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ…ΠΎΠ΄ΠΎΠ² массива .

Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ способ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для поиска ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹.Π•ΡΡ‚ΡŒ Π»ΠΈ структура Π΄Π°Π½Π½Ρ‹Ρ…, которая позволяСт постоянноС врСмя поиска O (1) ?

Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π°

Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π° - это Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π₯эш-функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сопоставлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с индСксами, Ρ‚Π°ΠΊΠΆΠ΅ извСстными ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ΠΈ. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ постоянноС врСмя поиска.

Π’ JavaScript ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для создания Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’ΠΎΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² строках 6–9, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ индСксу ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ , ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΡΡŒ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ .

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ прСимущСством использования Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ являСтся врСмя поиска O (1) . ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ значСния сопоставлСны с ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΆΠ΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ с использованиСм Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

Π˜Ρ‚Π°ΠΊ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для Π΄Π²ΡƒΡ… сумм; ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹?

РСшСниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° состоит ΠΈΠ· Π΄Π²ΡƒΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΎΠ΄ΠΈΠ½ Π²Π»ΠΎΠΆΠ΅Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π¦ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, - это Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· массив нСсколько Ρ€Π°Π·.Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π±Ρ‹Π» ΠΎΠΊΡ€Π°ΡˆΠ΅Π½ Π² Π·Π΅Π»Π΅Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅.

Если Π±Ρ‹ Π±Ρ‹Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», прСдставлСнный ΠΎΠΊΠ½ΠΎΠΌ , красным ΠΎΠΊΠ½ΠΎΠΌ Π½Π° рисункС Π²Ρ‹ΡˆΠ΅, врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π±Ρ‹ O (n) , Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ.

РСкомСндуСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ». МоТно Π»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ?

Π”Π°, Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ вмСстС с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ.

Π˜Ρ‚Π°ΠΊ, Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массив ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту Π·Π° Ρ€Π°Π·. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ currentElement Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ элСмСнтом Π² массивС . Как это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹?

Число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сопряТСно с currentElement , - это Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ currentElement ΠΈ target . Π˜Ρ‚Π°ΠΊ, сохранитС Ρ†Π΅Π»ΡŒ - currentElement Π² currentDifference .Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ поиска Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, являСтся Π»ΠΈ currentDifference ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Если ΠΎΠ½ сущСствуСт Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ являСтся элСмСнтом массива .

Π’ΠΎΡ‚ рисунок, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описан этот шаг Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Для этого Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ: array = [3, 2, 4], target = 6 . ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Ρ†ΠΈΠΊΠ»Π΅ currentElement = 2 .

Иногда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Ρ€ΡƒΡ‡ΠΊΠ° ΠΈ Π±ΡƒΠΌΠ°Π³Π°.

ΠžΡ‚Π²Π΅Ρ‚ для этих Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…: [1, 2] , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 2 ΠΈ 4 с индСксами 1 ΠΈ 2 соотвСтствСнно ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ°Ρ€Ρƒ чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² суммС ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ target = 6 .

Алгоритм, описанный Π²Ρ‹ΡˆΠ΅, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ нашСл ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ элСмСнт ΠΏΡƒΡ‚Π΅ΠΌ поиска currentDifference Π² hashTable , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ этот элСмСнт. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ Π²Π΅Ρ€Π½ΡƒΠ» индСкс hashTable [currentDifference] , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался Π² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ [1, 2] . 1 прСдставляСт собой индСкс currentElement Π² массивС .

ЕдинствСнноС прСдостСрСТСниС для этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ элСмСнт Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ сам с собой, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΈ .Однако простая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° currentElementIndex! == hashTable [currentDifference] устранит этот ΠΏΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ случай.

Π˜Ρ‚Π°ΠΊ, ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΈ Π΅Π³ΠΎ индСкс соотвСтствСнно.
  2. ΠžΠ±ΠΎΠΉΡ‚ΠΈ массив . Для currentElement вычислитС currentDifference .
  3. Если currentDifference сущСствуСт Π² hashTable ΠΈ currentElementIndex! == hashTable [currentDifference] , Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ индСксы ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта.
  4. Если currentDifference Π½Π΅ сущСствуСт ΠΈΠ»ΠΈ индСксы ΠΎΠ±ΠΎΠΈΡ… элСмСнтов Ρ€Π°Π²Π½Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту Π² массивС .

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²: сумма ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто встрСчаСтся… | Π‘ΠΈΠ½Π΄ΠΈ КСй

Π‘ 2021 Π³ΠΎΠ΄ΠΎΠΌ! Π­Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Π³ΠΎΠ΄ ΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ, ΠΈ ΠΌΡ‹ снова погруТаСмся Π² освоСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

Π― Π±Ρ‹Π» занят ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΎΠΉ ΠΊ прСдстоящим собСсСдованиям ΠΈ ΡƒΠ΄Π²ΠΎΠΈΠ» усилия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ…, поэтому Π½Π° этой Π½Π΅Π΄Π΅Π»Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ сСрии Β«ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²Β».

Π€ΠΎΡ‚ΠΎ timJ Π½Π° Unsplash

Product Sum

На этой Π½Π΅Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Π·Π°Π΄Π°Ρ‡Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Product Sum. Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²ΠΎ врСмя тСхничСских собСсСдований. Учитывая массив, наша Π·Π°Π΄Π°Ρ‡Π° - Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму Π΅Π³ΠΎ произвСдСния.

НСкоторыС Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ приступим ΠΊ Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Π”Π°Π½Π½Ρ‹ΠΉ массив (Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Β«ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΒ» массивом) всСгда являСтся нСпустым массивом, содСрТащим Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Β«ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅Β» массивы.

А Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΠΎΠ΄ суммой ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°? Π‘ΡƒΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° «особого» массива прСдставляСт собой сумму Π΅Π³ΠΎ элСмСнтов, Π½ΠΎ с ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠΎΠΉ - Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Β«ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅Β» массивы, элСмСнты Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ массива ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° ΠΈΡ… ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ (ΠΊΠ°ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Β«ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉΒ» массив).

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ:

 Π”Π°Π½Π½Ρ‹ΠΉ массив: [a, b] 
Π‘ΡƒΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° = a + bGiven Массив: [a, [b, c]]
Π‘ΡƒΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° = a + 2 (b + c) Π—Π°Π΄Π°Π½Π½Ρ‹ΠΉ массив: [a, [b, [c]]]
Π‘ΡƒΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° = a + 2 (b + 3c)

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

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€

Основной ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ являСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ уровня Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ элСмСнта. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ массив ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… массивов, это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ довольно Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ. Однако Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ ΠΎΠ± этом - ΠΏΠΎΠΊΠ° ΠΌΡ‹ просматриваСм наш массив, Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт являСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ массивом, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт. Если ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΄Π°Π½Π½Ρ‹ΠΉ массив ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ элСмСнт массива, Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с массивом Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ уровня Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пытаСмся Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΌΠ΅Π»ΡŒΡ‡Π°ΠΉΡˆΠΈΠΌ подробностям, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ Π΄ΠΎ сих ΠΏΠΎΡ€. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ массив ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, являСтся Π»ΠΈ элСмСнт Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ², являСтся Π»ΠΈ элСмСнт Π΄Ρ€ΡƒΠ³ΠΈΠΌ массивом. Если это Π½Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ массив - Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это Π½Π΅Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт - ΠΌΡ‹ просто Π΄ΠΎΠ±Π°Π²ΠΈΠΌ элСмСнт ΠΊ нашСй суммС. Если элСмСнт Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ являСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ массивом, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сначала Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, насколько Π²Π»ΠΎΠΆΠ΅Π½ элСмСнт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это для умноТСния Π½Π° сумму Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ массива.Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, это ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ рСкурсии.

ПошаговоС руководство ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ собствСнно ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

Π― Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ элСмСнт массивом, я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Array.isArray () , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, являСтся Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массивом.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sum ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Π½Π΅Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ сумму.Нам Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ. Π—Π΄Π΅ΡΡŒ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство влоТСнности , для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ элСмСнта.

Π’ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ массиву ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массивом. Если это Ρ‚Π°ΠΊ, ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ рСкурсивный Π²Ρ‹Π·ΠΎΠ² нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ сумму. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΡ‡Π΅ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ элСмСнтов, Π΄ΠΎΠ±Π°Π²ΠΈΠ² 1 ΠΊ нашСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ влоТСнности . Если ΠΌΡ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с массивом, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт ΠΊ нашСй суммС.Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сумму, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π½Π° Π½Π°ΡˆΡƒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сумму нашСго ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² JavaScript:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ Π² массивС с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ суммой

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ Π² массивС с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ суммой - Π—Π°Π΄Π°Ρ‡Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ слоТности : Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ

Π‘ΠΏΡ€ΠΎΡˆΠ΅Π½ΠΎ Π² : Google, Facebook, Amazon

ПониманиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

ОписаниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Учитывая массив ΠΈΠ· n Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число K, опрСдСляСт Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² массивС ΠΏΠ°Ρ€Π° элСмСнтов, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎ K.

НапримСр:

Π’Π²ΠΎΠ΄: A [] = [-5, 1, -40, 20, 6, 8, 7], K = 15

Π’Ρ‹Ρ…ΠΎΠ΄: true (7, 8 ΠΈ -5, 20 - ΠΏΠ°Ρ€Ρ‹ с суммой 15)

Π’Ρ…ΠΎΠ΄: A [] = [-5, 4, -2, 16, 8, 9], K = 15

Π’Ρ‹Ρ…ΠΎΠ΄: false (НСт ΠΏΠ°Ρ€Ρ‹ элСмСнтов, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½Π° Π½Π° 15)

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вопросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽΠ΅Ρ€Ρƒ:

  • Π—Π½Π°Π΅ΠΌ Π»ΠΈ ΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ чисСл Π² массивС? ΠžΡ‚Π²Π΅Ρ‚: НСт, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами.
  • ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ элСмСнты массива ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹? ΠžΡ‚Π²Π΅Ρ‚: НСт, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ.
  • Π—Π½Π°Π΅ΠΌ Π»ΠΈ ΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ K ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ чисСл Π² массивС? ΠžΡ‚Π²Π΅Ρ‚: НСт, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ.
  • МоТно Π»ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‹ элСмСнта ΠΈ самого сСбя? ΠžΡ‚Π²Π΅Ρ‚: НСт, ΠΏΠ°Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… элСмСнтов массива.
  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ массив ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹? ΠžΡ‚Π²Π΅Ρ‚: ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° эффСктивных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

ΠœΡ‹ обсуТдаСм Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ способа Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  1. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Π³Ρ€ΡƒΠ±ΠΎΠΉ силы: использованиС Π΄Π²ΡƒΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ²
  2. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск
  3. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с двумя указатСлями
  4. ИспользованиС Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

1.ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Π³Ρ€ΡƒΠ±ΠΎΠΉ силы: использованиС Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ‚Π΅Π»ΡŒ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²Π΅ ΠΏΠ΅Ρ‚Π»ΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ A [i] + A [j] == K для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ (i, j) Π² A []. Если сущСствуСт ΠΏΠ°Ρ€Π° с суммой, Ρ€Π°Π²Π½ΠΎΠΉ K, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ true. К ΠΊΠΎΠ½Ρ†Ρƒ ΠΎΠ±ΠΎΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ², Ссли Π²Ρ‹ Π½Π΅ нашли Ρ‚Π°ΠΊΡƒΡŽ ​​пару, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ false.

ПсСвдокод

  int find_sumPair (A [], n, K)
{
  для (ΠΎΡ‚ i = 0 Π΄ΠΎ n-1)
  {
     для (ΠΎΡ‚ j = i + 1 Π΄ΠΎ n-1)
     {
         Ссли (A [i] + A [j] == K)
         Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 1
     }
  }
Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ -1
}  

Анализ слоТности

ΠžΠ±Ρ‰Π΅Π΅ количСствосравнСния Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС = ВсСго Π½Π΅Ρ‚. Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€ = nC2 = n (n-1) / 2 = O (nΒ²)

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ = O (nΒ²) ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пространства = O (1). МоТСм Π»ΠΈ ΠΌΡ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π°Π΄ этим ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ.

2. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск

ИдСя Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² случаС сортированного массива. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ A [] ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния A [i] ΠΈΡΠΊΠ°Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ K-A [i] Π² ​​массивС ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск выполняСт поиск Π·Π° O (logn), Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π½Π°ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

Π¨Π°Π³ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

  • ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ массив A [] Π² порядкС возрастания
  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта A [i] ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ K-A [i].
  • Если Π² массивС A сущСствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ K-A [i], Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ true.
  • Если Π²Ρ‹ Π½Π΅ нашли Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ Π²ΠΎ всСм массивС, Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ false.

ПсСвдокод

  int find_sumPair (A [], n, K)
 {
   Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (A, n)
   для (ΠΎΡ‚ i = 0 Π΄ΠΎ n-1)
   {
      x = binarySearch (A, 0, n-1, K-A [i])
      Ссли (Ρ…)
      Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 1
   }
 Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ -1
 }  

Анализ слоТности

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сортировку ΠΏΠΎ ΠΊΡƒΡ‡Ρƒ / сортировку слияниСм ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ = Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки + n. ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска = O (nlogn) + n. O (logn) = O (nlogn)

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ = ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки + ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска (итСрационная рСализация)

ΠŸΡ€ΠΈ сортировкС слияниСм ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пространства = O (n) + O (1) = O ( n)

Если сортировка Π² ΠΊΡƒΡ‡Π΅, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пространства = O (1) + O (1) = O (1)

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ для Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ!

  • ΠšΠ°ΠΊΠΎΠ²Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ пространствСнныС слоТности, Ссли Π±Ρ‹ ΠΌΡ‹ использовали Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ сортировку? Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сортировки
  • Какова Π±ΡƒΠ΄Π΅Ρ‚ пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ рСкурсивного Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска?
  • ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ K - A [i] для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² массивС A []?
  • ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ список ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ идСю сортировки ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.

3. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с двумя указатСлями

ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ массив A [], Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ΡΡŒ двумя указатСлями Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†ΠΎΠ² массива, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ глядя Π½Π° ΠΈΡ… сумму. Если это Ρ€ΠΎΠ²Π½ΠΎ k, Ρ‚ΠΎ всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ. Если ΠΎΠ½ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ k, Ρ‚ΠΎ любая сумма, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ больший элСмСнт, слишком Π²Π΅Π»ΠΈΠΊΠ°, поэтому ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ. Если ΠΎΠ½ мСньшС k, Ρ‚ΠΎ любая сумма, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ Π½ΠΈΠΆΠ½ΠΈΠΉ элСмСнт, слишком ΠΌΠ°Π»Π°, поэтому ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ.

Π¨Π°Π³ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

  1. ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ массив A [] Π² порядкС возрастания
  2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π²Π΅ индСксныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² отсортированном массивС A [].
  • Π»Π΅Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ: i = 0
  • ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ: j = n-1

3) Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° i

  • Если (A [i] + A [j] == K), Ρ‚ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ истину
  • if (A [i] + A [j]
  • if (A [i] + A [j]> K) Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ j Π½Π° 1

4) Если Π½Π΅ нашСл Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ Π²ΠΎ всСм массивС - Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ false.

Визуализация Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

ПсСвдокод

  int find_sumPair (A [], n, K)
 {
    Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (A, n)
    я = 0
    j = n -1
    Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ (я  

Анализ слоТности

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сортировку ΠΊΡƒΡ‡ΠΈ ΠΈΠ»ΠΈ сортировку слияниСм.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ = Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки + Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° с двумя указатСлями (Ρ†ΠΈΠΊΠ» while) = O (n log n) + O (n) = O (n log n)

ΠŸΡ€ΠΈ сортировкС слияниСм ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пространства = O ( n)

Если сортировка Π² ΠΊΡƒΡ‡Π΅, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пространства = O (1)

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ для Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ!

  • этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ссли элСмСнты ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ?
  • ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»Π° while Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС Ρ€Π°Π²Π½Π° O (n) - ΠΏΠΎΡ‡Π΅ΠΌΡƒ?
  • ΠŸΠΎΡ‡Π΅ΠΌΡƒ идСя ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° с двумя указатСлями идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для отсортированного массива?
  • ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ список ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ идСю ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° с двумя указатСлями для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

4. ИспользованиС Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° выполняСт поиск ΠΈ вставку эффСктивно Π² срСднСм O (1).

Π¨Π°Π³ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

  1. Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ H Ρ€Π°Π·ΠΌΠ΅Ρ€Π° O (n)
  2. ЗапуститС Ρ†ΠΈΠΊΠ» ΠΈ просканируйтС массив A [] для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ A [i]. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, присутствуСт Π»ΠΈ K-A [i] Π² β€‹β€‹Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.
  • Если Π΄Π°, ΠΌΡ‹ нашли ΠΏΠ°Ρ€Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ истину.
  • Если Π½Π΅Ρ‚, Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ A [i] Π² β€‹β€‹Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

3.Если Π²Ρ‹ Π½Π΅ нашли Ρ‚Π°ΠΊΡƒΡŽ ​​пару ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ Ρ†ΠΈΠΊΠ»Π°, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ false.

ПсСвдокод

  bool checkPair (int A [], int n, int K)
{
  Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ H Ρ€Π°Π·ΠΌΠ΅Ρ€Π° O (n)
  для (ΠΎΡ‚ i = 0 Π΄ΠΎ n-1)
  {
      int x = K - A [i]
      Ссли (H.search (x) Π²Π΅Ρ€Π½ΠΎ)
          Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 1
      H.insert (A [i])
  }
 Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ -1
}  

Анализ слоТности

Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС ΠΌΡ‹ просматриваСм вСсь массив ΠΈ Π½Π΅ нашли Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Ρ‹. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ = Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ вставки n элСмСнтов Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ + Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ поиска (K-A [i]) n Ρ€Π°Π· Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ = n.О (1) + ΠΏ. O (1) = O (n)

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пространства = Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ = O (n)

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ для Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ!

  • этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ссли элСмСнты ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ?
  • ΠšΠ°ΠΊΠΎΠ²Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ пространствСнныС слоТности, Ссли Π±Ρ‹ ΠΌΡ‹ использовали Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска вмСсто Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹? Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска
  • Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ структуры Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ список ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ структуры Π΄Π°Π½Π½Ρ‹Ρ… (Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°, BST, приоритСтная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, стСк, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ Ρ‚. Π”.) Для эффСктивного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.
  • Π•ΡΡ‚ΡŒ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? Think

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

  1. Π”Π°Π½ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ число K, Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ всС ΠΏΠ°Ρ€Ρ‹ Π² массивС, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½Π° K.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *