Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

186
Views
Reorganizar las oraciones en función de los requisitos previos.

Quiero reorganizar las oraciones para que cada oración sea un requisito previo para la siguiente oración y esto es lo que tengo y funciona bien:

 const sentences = [ "he has eaten a pizza at the party last night", "he has eaten a pizza", "he has eaten a pizza at the party", ] function sessionCardsSort(arr) { arr = arr.map(part => part.split(' ')).sort((a, b) => a.length - b.length); function sortBy(list, main) { return list.sort((a, b) => { let count1 = 0, count2 = 0; a.forEach(part => { if(main.includes(part)) { count1++ } }); b.forEach(part => { if(main.includes(part)) { count2++ } }); return count1 - count2; }); } return sortBy(arr, arr[arr.length - 1]).map(part => part.join(' ')); } console.log(sessionCardsSort(sentences));

Como puede ver, utilicé una matriz simple con sentences nombradas como estructura de datos para trabajar, pero ¿qué pasa si queremos usar los mismos datos de la matriz de sentences con una nueva estructura como esta?

 const sentences = [ { reference: ['he has eaten a pizza at the party', 'last night'] } { reference: ['"he has', 'eaten a pizza'] }, { reference: ['he', 'has', 'eaten a pizza at the party'] }, ]

Entonces, el problema es que quiero implementar exactamente la misma función esta vez para una matriz de objetos, ¡no solo una matriz simple!

Aquí está el resultado deseado (solo usando la función anterior exacta):

 const sentences = [ { reference: ['"he has', 'eaten a pizza'] }, { reference: ['he', 'has', 'eaten a pizza at the party'] }, { reference: ['he has eaten a pizza at the party', 'last night'] } ]

Nota: en la segunda estructura de datos, unir elementos dentro de cada reference le dará la misma oración que el primer ejemplo, por ejemplo:

 { reference: ['he has eaten a pizza at the party', 'last night'] } "he has eaten a pizza at the party last night"

Nota: tenga en cuenta que quiero implementar exactamente la misma función

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Dado que las palabras de cada oración son un subconjunto estricto de otra oración en el conjunto, o la oración es la más grande, parece que sería mucho más fácil verificar la longitud total de las cadenas.

Asigne a cada oración una propiedad de longitud (que es la longitud de la cadena unida), y luego ordene la matriz de objetos resultante por esa longitud, y finalmente elimine la propiedad de longitud agregada.

 const sentences = [ { reference: ['"he has', 'eaten a pizza'] }, { reference: ['he', 'has', 'eaten a pizza at the party'] }, { reference: ['he has eaten a pizza at the party', 'last night'] } ]; function sessionCardsSort(sentences) { const sentencesWithLength = sentences.map( ({ reference }) => ({ reference, length: reference.join(' ') }) ); return sentencesWithLength .sort((a, b) => a.length - b.length) .map(({ reference }) => ({ reference })); } console.log(sessionCardsSort(sentences));

O calcule la longitud cada vez dentro de la devolución de llamada: más trabajo (lo que podría ser un problema cuando se trata de grandes conjuntos de datos), pero menos código.

 const sentences = [ { reference: ['"he has', 'eaten a pizza'] }, { reference: ['he', 'has', 'eaten a pizza at the party'] }, { reference: ['he has eaten a pizza at the party', 'last night'] } ]; const toLength = arr => arr.reference.join(' ').length; const sessionCardsSort = (sentences) => sentences .sort((a, b) => toLength(a) - toLength(b)); console.log(sessionCardsSort(sentences));

No parece necesario dada la entrada en la pregunta, pero si realmente necesita contar palabras individualmente, use una función con una lógica similar a su sortBy actual para contar la cantidad de palabras incluidas.

 const sentences = [ { reference: ['"he has', 'eaten a pizza'] }, { reference: ['he', 'has', 'eaten a pizza at the party'] }, { reference: ['he has eaten a pizza at the party', 'last night'] } ]; const toLength = obj => obj.reference.join(' '); const toWordsIncluded = (obj, mainWords) => obj.reference .join(' ') .split(' ') .reduce((subtotal, word) => subtotal + mainWords.includes(word), 0) const sessionCardsSort = (sentences) => { const sorted = sentences .sort((a, b) => toLength(a) - toLength(b)); const mainWords = sorted[sorted.length - 1].reference.join(' ').split(' '); return sorted .sort((a, b) => toWordsIncluded(a, mainWords) - toWordsIncluded(b, mainWords)); }; console.log(sessionCardsSort(sentences));

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!