JavaScript-ում reduce() մեթոդը
Մանրամասներ , օրինակներ, պրակտիկա
reduce() մեթոդը JavaScript-ում այն է, երբ ուզում ենք մեկ արժեքի մեջ հավաքել ամբողջ զանգվածի տարրերը՝ որոշակի օպերացիաներ կատարելով։ Սա հենց այն գործիքն է, որը շատ հաճախ օգտագործվում է համախմբված արդյունքների ստացման համար, օրինակ՝ գումարներ, հաշվողական արժեքներ, թվերի շարքի համեմատություն և այլն։
Այս հոդվածում մենք կսովորենք՝
array.reduce(function(accumulator, currentValue, currentIndex, array) { // վերադարձնում է նոր արժեքը }, initialValue);
Պարամետրեր
const numbers = [1, 2, 3, 4]; const sum = numbers.reduce(function(acc, num) { return acc + num; }, 0); console.log(sum); // 10
Այս դեպքում reduce()-ը գումարում է բոլոր թվերը՝ սկսելով 0 արժեքից։
const nums = [1, 2, 3, 4, 5]; const doubled = nums.map(n => n * 2); // [2, 4, 6, 8, 10] const evens = nums.filter(n => n % 2 === 0); // [2, 4] const sum = nums.reduce((acc, num) => acc + num, 0); // 15
Եզրակացություն: map() ու filter()-ը վերադառնում են նոր զանգվածներ, իսկ reduce()-ը վերադարձնում է մեկ արժեք։
Ահա մի օրինակ, որտեղ հաշվում ենք զանգվածի բոլոր տարրերի միջին արժեքը։
const numbers = [10, 20, 30, 40, 50]; const average = numbers.reduce(function(acc, num, index, array) { acc += num; if (index === array.length - 1) { return acc / array.length; } return acc; }, 0); console.log(average); // 30
Այս դեպքում մենք յուրաքանչյուր տարրի վրա կատարում ենք գումար և միայն վերջում բաժանում ենք զանգվածի երկարությամբ, որպեսզի ստանանք միջին արժեքը։
reduce()-ը կապված է Array.prototype-ին։
Երբ գրում ենք՝
[1, 2, 3].reduce(fn, 0);
Սա նույնն է ինչ՝
Array.prototype.reduce.call([1, 2, 3], fn, 0);
function myReduce(array, callback, initialValue) { let accumulator = initialValue; for (let i = 0; i < array.length; i++) { accumulator = callback(accumulator, array[i], i, array); } return accumulator; }
Օգտագործում ենք այսպես՝
const nums = [1, 2, 3, 4]; const sum = myReduce(nums, function(acc, num) { return acc + num; }, 0); console.log(sum); // 10
Array.prototype.myReduce = function(callback, initialValue) { let accumulator = initialValue; for (let i = 0; i < this.length; i++) { accumulator = callback(accumulator, this[i], i, this); } return accumulator; };
Օգտագործում ենք՝
const nums = [1, 2, 3, 4]; const sum = nums.myReduce((acc, num) => acc + num, 0); console.log(sum); // 10
Նկատիր՝ ինչպես reduce()-ը անցնում է բոլոր տարրերը և յուրաքանչյուր քայլում օգտագործում է նախորդ արդյունքը (accumulator)։