ภาพรวม
บทความนี้สาธิตวิธีสร้างอาร์เรย์ใหม่จากผลรวมของคู่ Element ที่ติดกัน (Pairwise Sum) เช่น [3,6,3,87,3,23,2,2,6,8] -> [9,90,26,4,14]
ตัวอย่าง
Indices: (0,1) (2,3) (4,5) (6,7) (8,9)
Values: 3+6=9, 3+87=90, 3+23=26, 2+2=4, 6+8=14
การนำไปใช้
const twiceSum = (arr) => {
const res = [];
for (let i = 0; i < arr.length; i += 2) {
res.push(arr[i] + (arr[i + 1] || 0));
}
return res;
};
console.log(twiceSum([3, 6, 3, 87, 3, 23, 2, 2, 6, 8]));
ผลลัพธ์
[9, 90, 26, 4, 14]
วิธีการทันสมัย
// ใช้ filter index แบบคู่
const pairwiseSum = (arr) =>
arr.filter((_, i) => i % 2 === 0)
.map((val, i) => val + (arr[2 * i + 1] || 0));
// ใช้ reduce
const pairwiseSumReduce = (arr) =>
arr.reduce((acc, val, i) => {
if (i % 2 === 0) acc.push(val + (arr[i + 1] || 0));
return acc;
}, []);
// Chunk แล้ว Sum
const chunkSum = (arr, size = 2) =>
Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>
arr.slice(i * size, (i + 1) * size).reduce((a, b) => a + b, 0)
);
การประยุกต์ใช้
- Signal Processing: Downsampling, Moving Average
- Financial: Pair Trade Returns
- Data Compression: Pairwise Aggregation
- Game Development: Combine Adjacent Tiles (2048-style)
ข้อควรระวัง
- Odd Length Array: ตัวสุดท้ายบวกกับ 0 (หรือ Undefined)
- Empty Array: คืน []
- Non-numeric: ควร Validate/Convert ก่อน
Generic Chunk Sum
const chunkSumGeneric = (arr, chunkSize = 2) => {
const result = [];
for (let i = 0; i < arr.length; i += chunkSize) {
let sum = 0;
for (let j = 0; j < chunkSize && i + j < arr.length; j++) {
sum += arr[i + j];
}
result.push(sum);
}
return result;
};