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)։