Tengo una matriz como;
arr = ["0","22","36","49","54","64","69","82","87","110","115","128","133","143","148","161","166","179","184","197","202","211","216","229","234","246","251","263","268","280","285","297","302","314","319"]Quiero crear una nueva matriz como
[[0,22],[22,36],[36,49],[49,54]...[314,319], [319]]Me gustó
function chunkArray(arr, len) { const chunkedArr = [] arr.forEach(val => { const last = chunkedArr[chunkedArr.length - 1]; if (!last || last.length === len) { chunkedArr.push([val]); } else { last.push(val); } }); return chunkedArr; } const chunked = chunkArray(arr, 2)Pero me da una matriz de dos partes como;
[["0","22"],["36","49"],["54","64"],["69","82"],["87","110"],["115","128"],["133","143"],["148","161"],["166","179"],["184","197"],["202","211"],["216","229"],["234","246"],["251","263"],["268","280"],["285","297"],["302","314"],["319"]]Esto debería hacerlo:
const chunked = arr.map((a,i) => [a].concat(i < arr.length - 1 ? [arr[i+1]] : []));DEMO 1
const arr = ["0","22","36","49","54","64","69","82","87","110","115","128","133","143","148","161","166","179","184","197","202","211","216","229","234","246","251","263","268","280","285","297","302","314","319"] const chunked = arr.map((a,i) => [a].concat(i < arr.length - 1 ? [arr[i+1]] : [])); console.log( chunked );O para generalizar el uso:
function chunkArray(arr, len) { return arr.map((el,i,ar) => ar.slice(i,i+len)); } const chunked = chunkArray(arr, 3); console.log( chunked );DEMO 2
const arr = ["0","22","36","49","54","64","69","82","87","110","115","128","133","143","148","161","166","179","184","197","202","211","216","229","234","246","251","263","268","280","285","297","302","314","319"] function chunkArray(arr, len) { return arr.map((el,i,ar) => a.slice(i,i+len)); } const chunked = chunkArray(arr, 3); console.log( chunked );Creo que lo que necesitas es algo como esto:
function chunkArray(arr, len) { const chunkedArr = []; for (val of arr) { if (chunkedArr.length) { const last = chunkedArr[chunkedArr.length - 1]; if (last.length < len) { last.push(val); } } chunkedArr.push([val]); } return chunkedArr; } arr = ["0","22","36","49","54","64","69","82","87","110","115","128","133","143","148","161","166","179","184","197","202","211","216","229","234","246","251","263","268","280","285","297","302","314","319"]; const chunked = chunkArray(arr, 2); console.log(chunked);Simplemente lea el siguiente valor y cree una nueva matriz. Cuando llegue al final, simplemente agregue ese índice único
const arr = ["0", "22", "36", "49", "54", "64", "69", "82", "87", "110", "115", "128", "133", "143", "148", "161", "166", "179", "184", "197", "202", "211", "216", "229", "234", "246", "251", "263", "268", "280", "285", "297", "302", "314", "319"] const result = arr.map((x, i, a) => i < a.length - 1 ? [+a[i + 1], +x] : [+x]).filter(Boolean); console.log(result);