Nội dung bài viết Reduce javascript - Qua một cuộc khảo sát về độ khó của các method thì 90% câu trả lời đó chính là reduce method. Không quá bất ngờ, bời vì sử dụng reduce gây hiểu nhầm nhất, và cũng gây khó hiểu nhất trong các method. Lý do vì sao? Tôi sẽ nói cho các bạn nghe ngay dưới đây. Nói về Reduce thì thật ra đây là một method được những devjs nhiều kinh nghiệm hay sử dụng nhiều nhất, bởi vì nó có thể thay thế cho nhiều method khác mà tôi sắp trình bày dưới đây. Cho dù trong bất cứ hoảnh cảnh nào, ý tôi ở đây là có thể nhiều trường hợp không thể sử dụng map[] or filter[] thì reduce thay thế là một phương án tuyệt vời. Qua bài viết về "Mổ xẻ cú pháp reduce javascript" thì ở đó bất cứ bạn nào cũng đã hiểu về syntax reduce method rồi. Và bây giờ dưới đây sẽ có 25 cách sử dụng reduce trong thực tế cho lập trình javascript. Đừng từ bỏ nó, chỉ vì reduce khó sử dung, hay xem đây...Video học lập trình mỗi ngày
Reduce trong Javascript - 25 cách sử dụng
Có thể sắp xếp dưới dây không phù hợp đối với mỗi lập trình bạn có thể tuỳ chỉnh cho các nhân của bạn nếu cần thiết.
Tính tổng và tích của array sử dụng reduce javascript
function Accumulation[...vals] { return vals.reduce[[t, v] => t + v, 0]; } function Multiplication[...vals] { return vals.reduce[[t, v] => t * v, 1]; } Accumulation[1, 2, 3, 4, 5]; // 15 Multiplication[1, 2, 3, 4, 5]; // 120
Reduce thay thế Reverse[]
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]
reduce thay thế map[] or filter[]
const arr = [0, 1, 2, 3]; //map: [0, 2, 4, 6] const a = arr.map[v => v * 2]; const b = arr.reduce[[t, v] => [...t, v * 2], []]; //filter: [2, 3] const c = arr.filter[v => v > 1]; const d = arr.reduce[[t, v] => v > 1 ? [...t, v] : t, []]; // reduce chấp cả hai map + fitler const e = arr.map[v => v * 2].filter[v => v > 2]; const f = arr.reduce[[t, v] => v * 2 > 2 ? [...t, v * 2] : t, []];
reduce thay thế some[] or every[]
const scores = [ { score: 45, subject: "chinese" }, { score: 90, subject: "math" }, { score: 60, subject: "english" } ]; //some const isAtLeastOneQualified = scores.reduce[[t, v] => t || v.score >= 60, false]; // true //every const isAllQualified = scores.reduce[[t, v] => t && v.score >= 60, true]; // false
chunk array
function Chunk[arr = [], size = 1] { return arr.length ? arr.reduce[[t, v] => [t[t.length - 1].length === size ? t.push[[v]] : t[t.length - 1].push[v], t], [[]]] : []; } const arr = [1, 2, 3, 4, 5]; Chunk[arr, 2]; // [[1, 2], [3, 4], [5]]
sử dụng reduce tìm phần tử khác nhau giữa hai array
function Difference[arr = [], oarr = []] { return arr.reduce[[t, v] => [!oarr.includes[v] && t.push[v], t], []]; } const arr1 = [1, 2, 3, 4, 5]; const arr2 = [2, 3, 6] Difference[arr1, arr2]; // [1, 4, 5]
Chèn phần từ vào một array cho trước sử dụng reduce
function Fill[arr = [], val = "", start = 0, end = arr.length] { if [start < 0 || start >= end || end > arr.length] return arr; return [ ...arr.slice[0, start], ...arr.slice[start, end].reduce[[t, v] => [t.push[val || v], t], []], ...arr.slice[end, arr.length] ]; } const arr = [0, 1, 2, 3, 4, 5, 6]; Fill[arr, "aaa", 2, 5]; // [0, 1, "aaa", "aaa", "aaa", 5, 6]
Làm phẳng một array sử dụng reduce
function Flat[arr = []] { return arr.reduce[[t, v] => t.concat[Array.isArray[v] ? Flat[v] : v], []] } const arr = [0, 1, [2, 3], [4, 5, [6, 7]], [8, [9, 10, [11, 12]]]]; Flat[arr]; // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Array trùng lặp phần tử sử dụng reduce
function Uniq[arr = []] { return arr.reduce[[t, v] => t.includes[v] ? t : [...t, v], []]; } const arr = [2, 1, 0, 3, 2, 1, 2]; Uniq[arr]; // [2, 1, 0, 3]
Reduce thay thế max[] và min[]
function Max[arr = []] { return arr.reduce[[t, v] => t > v ? t : v]; } function Min[arr = []] { return arr.reduce[[t, v] => t < v ? t : v]; } const arr = [12, 45, 21, 65, 38, 76, 108, 43]; Max[arr]; // 108 Min[arr]; // 12
Tách phần tử trong Array theo đúng type of
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]0
Đếm số lượng giống nhau trong một array sử dụng recude
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]1
group by use reduce
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]2
Thống kê xem các từ khoá có trong array hay không?
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]3
Định dang số thập phân sử dụng reduce
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]4
Parse url use reduce
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]5
Phân tích một Object sang params url
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]6
Get value của key của một Object cho trước
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]7
Chuyển đổi một array object sang object sử dụng redcuce
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]8
Hiệu suất khi sử dụng reduce javascript
Có nhiều câu hỏi tôi thường thấy và cũng có nhiều câu hỏi tương tự như vậy đó là hiệu suất khi thay thế reduce như thế nào khi sử dụng. Câu trả lời là khó nhận biết, bởi vì nó tuỳ thuộc và trường hợp bạn sử dụng, vào hoàn cảnh... Nhưng tôi có thể lấy một ví dụ dưới đây sử dụng 4 method đó là
const arr = [0, 1, 2, 3]; //map: [0, 2, 4, 6] const a = arr.map[v => v * 2]; const b = arr.reduce[[t, v] => [...t, v * 2], []]; //filter: [2, 3] const c = arr.filter[v => v > 1]; const d = arr.reduce[[t, v] => v > 1 ? [...t, v] : t, []]; // reduce chấp cả hai map + fitler const e = arr.map[v => v * 2].filter[v => v > 2]; const f = arr.reduce[[t, v] => v * 2 > 2 ? [...t, v * 2] : t, []];0,
const arr = [0, 1, 2, 3]; //map: [0, 2, 4, 6] const a = arr.map[v => v * 2]; const b = arr.reduce[[t, v] => [...t, v * 2], []]; //filter: [2, 3] const c = arr.filter[v => v > 1]; const d = arr.reduce[[t, v] => v > 1 ? [...t, v] : t, []]; // reduce chấp cả hai map + fitler const e = arr.map[v => v * 2].filter[v => v > 2]; const f = arr.reduce[[t, v] => v * 2 > 2 ? [...t, v * 2] : t, []];1,
const arr = [0, 1, 2, 3]; //map: [0, 2, 4, 6] const a = arr.map[v => v * 2]; const b = arr.reduce[[t, v] => [...t, v * 2], []]; //filter: [2, 3] const c = arr.filter[v => v > 1]; const d = arr.reduce[[t, v] => v > 1 ? [...t, v] : t, []]; // reduce chấp cả hai map + fitler const e = arr.map[v => v * 2].filter[v => v > 2]; const f = arr.reduce[[t, v] => v * 2 > 2 ? [...t, v * 2] : t, []];2 và
const arr = [0, 1, 2, 3]; //map: [0, 2, 4, 6] const a = arr.map[v => v * 2]; const b = arr.reduce[[t, v] => [...t, v * 2], []]; //filter: [2, 3] const c = arr.filter[v => v > 1]; const d = arr.reduce[[t, v] => v > 1 ? [...t, v] : t, []]; // reduce chấp cả hai map + fitler const e = arr.map[v => v * 2].filter[v => v > 2]; const f = arr.reduce[[t, v] => v * 2 > 2 ? [...t, v * 2] : t, []];3.
function Reverse[arr = []] { return arr.reduceRight[[t, v] => [t.push[v], t], []]; } Reverse[[1, 2, 3, 4, 5]]; // [5, 4, 3, 2, 1]9
Kết quả test
for loop javascript
reduce loop javascript
map javascript
Và hình ảnh kết quả cho ta thấy reduce trong trường hợp này là có hiệu suất tốt hơn hẳn. Chính vì vậy tôi cũng đã nói nó tuỳ thuộc vào nhiều yếu tố hay skill của bạn. Ví dụ bạn khai báo length trước khi sử dụng for kết quả có thể cho khác đấy! Chú ý kết quả test trên console chrome 83. Macbook 2019. Chú ý kết quả test trên console chrome 83. Macbook 2019.
Như vậy rất nhiều bài viết về "reduce javascript" và có thể đến đây là bạn có thể phào nhẹ nhõm khi vào một trường hợp nào đấy bắt buộc bạn phải sử dụng reduce trong ứng dụng của bạn. Bài viết chỉ khám phá bản thân cũng như tổng hợp kiến thức. Nếu bạn có một câu hỏi hay có ý kiến gì thì vui lòng pm vào fan page tips javascript. Cảm ơn đã đọc bài viết.