Có mảng đối tượng với value và gap. Viết hàm nhóm các đối tượng liên tiếp mà value của đối tượng hiện tại bằng value + gap của đối tượng trước.
Ví dụ: đối tượng value 12, gap 1 → đối tượng tiếp theo value 13 → cùng nhóm, tiếp tục với 14, 15.
Sử dụng reduce():
Ví dụ
const arr = [ { value: 12, gap: 1 }, { value: 13, gap: 1 }, { value: 14, gap: 1 }, { value: 15, gap: 1 }, { value: 19, gap: 2 }, { value: 21, gap: 1 }, { value: 22, gap: 1 }, { value: 23, gap: 1 }, { value: 27, gap: 1 }, { value: 31, gap: 4 }, { value: 35, gap: 4 }, { value: 39, gap: 4 }, { value: 43, gap: 1 }, { value: 50, gap: 1 }, { value: 51, gap: 1 }, { value: 52, gap: 1 }, { value: 55, gap: 1 }, { value: 57, gap: 1 },];const groupArray = arr => { return arr.reduce((acc, val, ind, array) => { const { data, currentIndex } = acc; const { value, gap } = val; const v = arr[ind - 1]?.value; const g = arr[ind - 1]?.gap; if (ind === 0 || value !== v + g) { const index = data.push([val]) - 1; return { data, currentIndex: index }; } data[currentIndex].push(val); return { data, currentIndex }; }, { data: [], currentIndex: 0 }).data;};console.log(groupArray(arr));Kết quả
Đầu ra trong console sẽ là:
[ [ { value: 12, gap: 1 }, { value: 13, gap: 1 }, { value: 14, gap: 1 }, { value: 15, gap: 1 } ], [ { value: 19, gap: 2 }, { value: 21, gap: 1 }, { value: 22, gap: 1 }, { value: 23, gap: 1 } ], [ { value: 27, gap: 1 } ], [ { value: 31, gap: 4 }, { value: 35, gap: 4 }, { value: 39, gap: 4 }, { value: 43, gap: 1 } ], [ { value: 50, gap: 1 }, { value: 51, gap: 1 }, { value: 52, gap: 1 } ], [ { value: 55, gap: 1 } ], [ { value: 57, gap: 1 } ] ]