Có nhiều cách bạn nên sử dụng để tính tổng của một dãy số. Hãy thảo luận về từng người trong số họ và thử các ví dụ
Bạn có thể sử dụng phương pháp để tìm tổng của một dãy số
Phương thức reduce() thực thi hàm rút gọn được chỉ định trên từng thành viên của mảng dẫn đến một giá trị đầu ra duy nhất như trong ví dụ sau
để mảng = [10, 20, 30, 40]; . giảm (hàm (a, b) { trả về a + b; }, 0); . nhật ký (tổng); . 100
0 trong là giá trị mặc định. Nếu giá trị mặc định không được cung cấp, phần tử đầu tiên trong mảng sẽ được sử dụng. Nếu mảng trống, bạn sẽ gặp lỗi
Nếu bạn sử dụng ES2015, bạn có thể làm cho nó dài dòng hơn như thế này
const tổng = [10, 20, 30]. bàn điều khiển giảm ((a, b) => a + b). nhật ký (tổng); . 60
Một phương pháp nhanh khác là sử dụng vòng lặp thậm chí còn nhanh hơn như phương thức reduce()
để số = [10, 20, 30, 40, 50] để tổng = 0; . chiều dài; . nhật ký (tổng) // Đầu ra. 150
Một cách khác để tính mảng số là sử dụng vòng lặp như thế này
mảng const = [10, 20, 30, 40]; . bảng điều khiển forEach(số => { kết quả += số; }). nhật ký (kết quả); . 100
Phương thức gọi một hàm rút gọn được cung cấp trên từng phần tử của mảng và dẫn đến một giá trị đầu ra duy nhất. Nó thực hiện gọi lại một lần cho mỗi giá trị được gán có trong mảng lấy bốn đối số. bộ tích lũy, giá trị hiện tại, chỉ số hiện tại, mảng. Nên cung cấp giá trị mặc định chẳng hạn như 0 để thực hiện phép cộng và 1 để thực hiện phép nhân
Mảng đối tượng JavaScript tổng phụ theo thay đổi trong một khóa đã chỉ định. Ban đầu được tạo cho một bảng HTML tổng phụ AngularJS
Ví dụ sử dụng
Đoạn mã sau
const subtotal = require('../src/subtotal'); const masterData = [ { name: 'Jake', value_0: 1, value_1: 2 }, { name: 'John', value_0: 4, value_1: 2 }, { name: 'John', value_0: 4, value_1: 1 }, { name: 'Sally', value_0: 8, value_1: 2 } ]; let output = subtotal(masterData, 'name', ['value_0', 'value_1']);
sẽ tạo đối tượng JavaScript sau
{ "John":{ data: [{name: "John", value_0: 4, value_1: 2}, {name: "John", value_0: 4, value_1: 1}], totals:{ value_0: 8, value_1: 3 } }, ... }
Tôi đang cố cộng ba tổng. totalPoints, monthlyTotals và monthlyByType sử dụng Array.prototype.reduce
Tôi có totalPoints và monthlyTotals hoạt động tốt nhưng tôi bị mắc kẹt ở cái cuối cùng, monthlyByType
Đây là mảng mà tôi cần lặp lại
const gamePointsArray = [ { gamePlayId: 'ggg1', gameType: 1, gameMonth: 4, gamePoints: 4000, }, { gamePlayId: 'ggg2', gameType: 2, gameMonth: 2, gamePoints: 7000, }, { gamePlayId: 'ggg3', gameType: 2, gameMonth: 0, gamePoints: 3000, }, { gamePlayId: 'ggg4', gameType: 1, gameMonth: 8, gamePoints: 25000, }, { gamePlayId: 'ggg5', gameType: 3, gameMonth: 8, gamePoints: 5000, }, { gamePlayId: 'ggg6', gameType: 3, gameMonth: 3, gamePoints: 10000, }, { gamePlayId: 'ggg7', gameType: 2, gameMonth: 3, gamePoints: 5000, }, ]Đây là bộ giảm tốc của tôi
const gamePointsReducer = (acc, game) => { const { gamePlayId, gameType, gameMonth, gamePoints,} = game if (!acc['totalPoints']) { acc['totalPoints'] = gamePoints } else { acc['totalPoints'] += gamePoints } if (!acc['monthlyTotals']) { acc['monthlyTotals'] = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, } } acc.monthlyTotals[`${gameMonth}`] += gamePoints if (!acc['monthByType']) { acc['monthByType'] = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}, 10: {}, 11: {}, } } acc.monthByType[`${gameMonth}`] += { [`${gameType}`]: gamePoints } return acc } const monthTotalsObj = gamePointsArray.reduce(gamePointsReducer, {}) console.log('Game Points totals obj', monthTotalsObj);Tôi cần kết quả cuối cùng const gamePointsReducer = (acc, game) => { const { gamePlayId, gameType, gameMonth, gamePoints,} = game if (!acc['totalPoints']) { acc['totalPoints'] = gamePoints } else { acc['totalPoints'] += gamePoints } if (!acc['monthlyTotals']) { acc['monthlyTotals'] = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, } } acc.monthlyTotals[`${gameMonth}`] += gamePoints if (!acc['monthByType']) { acc['monthByType'] = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}, 10: {}, 11: {}, } } acc.monthByType[`${gameMonth}`] += { [`${gameType}`]: gamePoints } return acc } const monthTotalsObj = gamePointsArray.reduce(gamePointsReducer, {}) console.log('Game Points totals obj', monthTotalsObj); 0 trông như thế này
{ totalPoints: 59000, monthlyTotals: { 0: 3000, 1: 0, 2: 7000, 3: 15000, 4: 4000, 5: 0, 6: 0, 7: 0, 8: 30000, 9: 0, 10: 0, 11: 0, }, monthByType: { 0: { 2: 3000, }, 1: {}, 2: { 2: 7000, }, 3: {}, 4: { 1: 4000, }, 5: {}, 6: {}, 7: {}, 8: { 1: 25000, 3: 5000, }, 9: {}, 10: {}, 11: {}, } }