• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

386
Views
Vue3js: ¿cómo recorrer la matriz exactamente 5 veces y verificar condicionalmente los elementos dentro?

tenga en cuenta que pasé las últimas 2 horas buscando en temas similares de SO para llegar a una solución, pero fallé. Por eso te pido ahora ayuda.

Estoy tratando de lograr lo siguiente:

Tengo un marcador con algunos resultados, que debería verse así:

  • John Doe 100 puntos
  • John Smith 50 puntos
  • Sin nombre
  • Sin nombre
  • Sin nombre

Tengo una matriz para esto llamada scoreBoardArray .

 data() { return { scoreBoardArray: [ { id: '1', name: 'John Doe', pts: 100 }, { id: '2', name: 'John Smith', pts: 50 }, ], } },

Puedo recorrerlo, pero no lo hago exactamente 5 veces y escupo "Sin nombre", cuando no se encuentra ningún registro.

Mi código (y mis intentos de resolver el problema):

 <ul> <li v-for="item in scoreBoardArray" :key="item.id"> <span v-if="item.id">{{ item.name }} {{ item.pts }}</span> <span v-if="!item.id">No Name</span </li> </ul>

por supuesto, he tratado de resolver el problema con el uso de una propiedad computed y un bucle simple for(let i=0; i<6; i++) {...} pero de alguna manera no puedo hacerlo funcionar.

about 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Claro, esto es algo que podría lograr con una propiedad calculada.

Intente simplemente agregar algunos objetos vacíos al final de su matriz para completarla con 5 valores.

 computed: { scoreboard() { let append = [] const appendCount = 5 - this.scoreBoardArray for (let i = 0; i < appendCount; i++) { append[i] = {} } return [...this.scoreBoardArray, ...append] } }

Pero dado que estos objetos están vacíos, encontrará problemas con las teclas de bucle v-for . Para solucionarlo, podría usar índices como claves:

 <li v-for="(item, index) in scoreboard" :key="index">
about 3 years ago · Juan Pablo Isaza Report

0

Podría usar una propiedad calculada para dividir los primeros 5 elementos en scoreBoardArray scoreBoardArray[] y obtener la cantidad de elementos ficticios "No Name" necesarios (llamados topScores y dummyLength , respectivamente):

 export default { computed: { topScores() { return this.scoreBoardArray .slice() // create a copy .sort((a,b) => b.pts - a.pts) // sort by points .slice(0, 5) // first 5 }, dummyLength() { return Math.max(0, 5 - this.topScores.length) } } }

Y actualice la plantilla para representar los accesorios calculados en un v-for , representando los elementos topScores y luego los elementos ficticios dummyLength :

 <ul> <li v-for="item in topScores" :key="item.id"> <span>{{ item.name }} ({{ item.pts }})</span> </li> <li v-for="n in dummyLength">No Name</li> </ul>

manifestación

about 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error