Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

186
Visualizações
Javascript Chunk Array según la longitud de subArray

Tengo un problema con la fragmentación de subarreglos. Como puede ver a continuación, hay muchos òbject dentro de los detail . Quiero dividirlos if detail[i].length + detail[i+1].length >= 11 matriz de fragmentos con 2, de lo contrario, fragmento 3.

 const isQuestions = [ { question: ['ques 1?'], detail: [ {a:1}, {a:2}, {a:3}, {a:4}, {a:5}, {a:6} ] } , { question: ['ques 2'], detail: [ {b:1}, {b:2}, {b:3}, {b:4}, {b:5}, {b:6}, {b:7}, {b:8} ] } , { question: ['ques 3?'], detail: [ {c:1}, {c:2}, {c:3}, {c:4}, {c:5}, {c:6}, {c:7} ] } , { question: ['ques 4'], detail: [ {d:1}, {d:2}, {d:3}, {d:4} ] } , { question: ['ques 5'], detail: [ {e:1}, {e:2}, {e:3}, {e:4} ] } , { question: ['ques 6'], detail: [ {f:1}, {f:2}, {f:3}, {f:4} ] } , { question: ['ques 7'], detail: [ {g:1}, {g:2}, {g:3}, {g:4} ] } ]

La matriz esperada sería como;

 [ [ { question: ['ques 1?'], detail: [ {a:1}, {a:2}, {a:3}, {a:4}, {a:5}, {a:6} ] } , { question: ['ques 2'], detail: [ {b:1}, {b:2}, {b:3}, {b:4}, {b:5}, {b:6}, {b:7}, {b:8} ] } ] , [ { question: ['ques 3?'], detail: [ {c:1}, {c:2}, {c:3}, {c:4}, {c:5}, {c:6}, {c:7} ] } , { question: ['ques 4'], detail: [ {d:1}, {d:2}, {d:3}, {d:4} ] } ] , [ { question: ['ques 5'], detail: [ {e:1}, {e:2}, {e:3}, {e:4} ] } , { question: ['ques 6'], detail: [ {f:1}, {f:2}, {f:3}, {f:4} ] } , { question: ['ques 7'], detail: [ {g:1}, {g:2}, {g:3}, {g:4} ] } ] ]

Como ves arriba, la suma de la última parte esperada de la matriz es 12. Pero no importa, lo importante es arr[i] + arr[i+1] length .

Hice una función como la función de mapa interior. Porque tengo múltiples arreglos como este.

 function isApsChunk(rawArray, size) { var returnedArray = []; for (var i = 0; i < rawArray.length; i += size) { if (rawArray[i + 1]) if (rawArray[i].detail.length + rawArray[i + 1].detail.length >= 11) { returnedArray.push(rawArray.slice(i, i + 2)); } else { returnedArray.push(rawArray.slice(i, i + size)); } } return [returnedArray]; } console.log(isApsChunk(isQuestions, 3))

Pero el problema es que la función toma una matriz con una longitud de 7, me da 5.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Por aquí:
con la ayuda de Array.reduce()

en este código el argumento r (acrónimo de result [accumulator in doc MDN]) se inicializa de la siguiente manera:
r = {resp: [], blk: null, len: 0, count: 0}

r.resp se convierte en el acumulador final
r.blk apunta a la matriz secundaria para llenar
r.len = size de la acumulación de detalle arr
r.count = r.blk.length , la linealidad aquí tiene 3 por el argumento de size de la función

{[i + 1]: next} permite apuntar al elemento i + 1 y nombrarlo next , adivinan indefinido cuando está fuera del arreglo (cuando estamos en el último elemento, el siguiente no existe y !!next se vuelve falso

!!next es equivalente a Boolean(siguiente)

 const isQuestions = [ { question: ['ques 1?'], detail: [ {a:1}, {a:2}, {a:3}, {a:4}, {a:5}, {a:6} ] } , { question: ['ques 2'], detail: [ {b:1}, {b:2}, {b:3}, {b:4}, {b:5}, {b:6}, {b:7}, {b:8} ] } , { question: ['ques 3?'], detail: [ {c:1}, {c:2}, {c:3}, {c:4}, {c:5}, {c:6}, {c:7} ] } , { question: ['ques 4'], detail: [ {d:1}, {d:2}, {d:3}, {d:4} ] } , { question: ['ques 5'], detail: [ {e:1}, {e:2}, {e:3}, {e:4} ] } , { question: ['ques 6'], detail: [ {f:1}, {f:2}, {f:3}, {f:4} ] } , { question: ['ques 7'], detail: [ {g:1}, {g:2}, {g:3}, {g:4} ] } ] const isApsChunk = (rawArray, size) => rawArray.reduce((r,elm,i,{[i+1]:next}) => { if (r.len===0 || r.len >= 11 || r.count >= size) { r.len = 0 r.count = 0 r.blk = [] r.resp.push(r.blk ) } r.len += elm.detail.length r.count++ r.blk.push( elm ) return (!!next)?r:r.resp },{ resp:[], blk:null, len:0, count:0 } ) console.log( isApsChunk(isQuestions, 3) )
 .as-console-wrapper { max-height: 100% !important; top: 0 }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda