Quiero cambiar una matriz a un objeto como este:
array = ["blue" , "txt2" , "red" ,"txt4" , "txt5" , "txt6" ,"txt7" , "txt8" , "txt9" ] pages = {"page1" :["blue","txt2", "red"] , "page2" : ["txt4", "txt5", "txt6"], "page3" : ["txt7" ,"txt8", "txt9"] Cada clave en el objeto de pages debe tener un valor de matriz con 3 elementos de matriz (la última clave puede tener menos), por lo que, por ejemplo, si una matriz tiene 110 elementos, tendremos 37 pages (página 1, página 2, ..., página 37) y la página 37 tendrá 1 elementos.
Entonces quiero poner cada 3 elementos en una matriz como valor de una clave en el objeto de las pages
Pero no se como hacerlo.. Gracias por tu ayuda
Puede hacerlo iterando sobre la array y extrayendo 3 elementos de la array en cada iteración utilizando el método de splice , como este:
let array = ["blue" , "txt2" , "red" ,"txt4" , "txt5" , "txt6" ,"txt7" , "txt8" , "txt9", "text10" ] let pages= {}, i= 1; while(array.length > 0){ pages[`page${i++}`] = array.splice(0,3) } console.log(pages) de esta manera, pierde los valores originales en la array , si desea mantener los elementos en la array sin modificar, puede hacer una copia de sus datos originales como let copiedArray = [...array] y luego llamar al método de empalme en la copiedArray y también verifique la length de copiedArray en el while .
Obtenga cada tercer índice y agregue todos los elementos desde ese punto hasta ese punto más tres (si ese índice está cerca del final, no dará error; solo agregará los elementos restantes):
const initial = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; let paginated = {}; let counter = 0 while (counter < initial.length) { paginated['page' + parseInt(counter / 3 + 1)] = initial.slice(counter, counter + 3); counter += 3; } console.log(paginated);Para una solución más configurable, puede buscar una función de utilidad de chunk para la división inicial de la matriz de entrada y luego asignarla como desee a su objeto de resultado (aquí usando Object.fromEntries y mapeando sobre la matriz fragmentada resultante para asignar 'página' claves basadas en el índice).
function chunk(arr, chunkSize) { const result = []; for (let i = 0; i < arr.length; i += chunkSize) { result.push(arr.slice(i, i + chunkSize)); } return result; } const array = ['blue', 'txt2', 'red', 'txt4', 'txt5', 'txt6', 'txt7', 'txt8', 'txt9']; const result = Object.fromEntries( chunk(array, 3).map((chunk, index) => [`page${index + 1}`, chunk]) ); console.log(result);ver: Dividir matriz en fragmentos para discusión.