Obtuve una matriz de objetos que necesito convertir en tres partes en la secuencia tal como están en la matriz original. Por ej.
let arr = [{1},{2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}];Esta matriz debe dividirse así:
let newArray = {a:[{1},{4},{7},{10},...}], b:[{2},{5},{8}], c:[{3},{6},{9}]};reduce puede distribuir cada valor en su ranura según el índice
Como necesita a,b,c en lugar de 0,1,2 , se necesita una pequeña asignación aquí mapNumLetter
let arr = ["{1}","{2}", "{3}", "{4}", "{5}", "{6}", "{7}", "{8}", "{9}", "{10}"]; // let newArray = {a:[{1},{4},{7},{10},...}], b:[{2},{5},{8}], c:[{3},{6},{9}]}; const mapNumLetter = { 0:"a", 1:"b", 2:"c" } const newArray = arr.reduce((acc,cur,i) => { acc[mapNumLetter[i%3]].push(cur); return acc },{a:[],b:[],c:[]}) console.log(newArray) (como {1} , {2} ... no son objetos válidos, los cambié a literales "{1}" , "{2}" ...)
{1} no es una estructura js válida
suponiendo que arr es una matriz de objetos, puede:
String.fromCharCode(current + 97) let arr = [{name:1},{name:2}, {name:3}, {name:4}, {name:5}, {name:6}, {name:7}, {name:8}, {name:9}, {name:10}]; function transform(theArray, chunkValue) { let finalObject = {}; let current = 0; let currentIndex; theArray.forEach(element => { currentIndex = String.fromCharCode(current + 97); if (!finalObject[currentIndex]) { finalObject[currentIndex] = []; } finalObject[currentIndex].push(element); current++; if (current === chunkValue) { current = 0; } }); console.log(finalObject); return finalObject; } transform(arr, 3);Tal vez este enfoque sería útil
const data = [{1:1}, {2:2}, {3:3}, {4:4}, {5:5}, {6:6}, {7:7}, {8:8}, {9:9}, {10:10}]; const chunk = (arr, n) => arr.length ? [arr.slice(0, n), ...chunk(arr.slice(n), n)] : []; const chunks = chunk(data, 3); const rotated = chunks[0].map((_, colIndex) => chunks.map(row => row[colIndex])); const result = rotated.map((arr, index) => ({ [index]: arr.filter(Boolean) })); console.log(result); .as-console-wrapper{min-height: 100%!important; top: 0}